zoukankan      html  css  js  c++  java
  • PIE SDK反距离权重插值算法

     

    1.算法功能简介

        反距离权重 (IDW) 插值使用一组采样点的线性权重组合来确定像元值。权重是一种反距离函数。进行插值处理的表面应当是具有局部因变量的表面。此方法假定所映射的变量因受到与其采样位置间的距离的影响而减小。例如,为分析零售网点而对购电消费者的表面进行插值处理时,在较远位置购电影响较小,这是因为人们更倾向于在家附近购物。

        根据给定的控制点对和控制点的位移矢量(方向和距离),实现图像每一个像素点的位移。反距离加权插值的方法是通过得到每一个像素点和选定控制点对的逼近关系,以及相对应的权重关系,求得像素点相对应的变化关系,逼近函数可以理解为对像素点p的影响程度,而权重函数则可以看成是对距离的权重,距离越远,权重越小。

     

        PIE支持算法功能的执行,下面对反距离权重算法功能进行介绍。

    2.算法功能实现说明

    2.1. 实现步骤

    第一步

    算法参数设置

    第二步

    算法执行

    第三步

    结果显示

    2.2. 算法参数

    C#算法DLL

    PIE.CommonAlgo.dll

    C#算法名称

    PIE.CommonAlgo. InverseDistanceInterpolationAlgo

    参数结构体

    InverseDistanceInterpolationInfo_Exchange_Info

    参数说明

    m_dCellSize

    double

    像元大小

    m_nHeight

    int

    输出栅格高度

    m_nWidth

    int

    输出栅格宽度

    m_pInputFeatDs

    IFeatureDataset

    输入要素数据集

    m_pOutputRasterDs

    IRasterDataset

    输出栅格数据集

    m_sOutRasterFilePath

    string

    输出栅格路径

    m_sOutRasterType

    string

    输出栅格类型

    m_ZFieldIndex

    int

    选择字段索引

    2.3. 示例代码

    数据路径

    百度云盘地址下/PIE示例数据/矢量数据/Shape/省会城市.shp

    视频路径

    百度云盘地址下/PIE视频教程/10.算法调用/实用工具/反距离权重算.avi

    示例代码

     1          /// <summary>
     2         /// 反距离权重测试
     3         /// </summary>
     4         private void Test_InverseDistanceInterpolation()
     5         {
     6             #region 1参数设置
     7             string filePath = @"D:\data\China\省会城市.shp";
     8             IFeatureDataset fDataset = DatasetFactory.OpenDataset(filePath, OpenMode.ReadOnly) as IFeatureDataset;
     9             PIE.CommonAlgo.InverseDistanceInterpolationInfo_Exchange_Info info = new InverseDistanceInterpolationInfo_Exchange_Info();
    10             info.m_pInputFeatDs = fDataset;
    11             info.m_sOutRasterType = "GTIFF";
    12             info.m_sOutRasterFilePath = @"D:\temp\省会城市反距离权重测试.tiff";
    13             info.m_ZFieldIndex = 1;
    14             info.m_nWidth = 100;
    15             info.m_dCellSize = fDataset.GetExtent().GetWidth() / info.m_nWidth;
    16             info.m_dSearchMaxDis = 10;
    17             info.m_nSearchPoints = 12;
    18             #endregion
    19             //2、算法执行
    20             PIE.CommonAlgo.InverseDistanceInterpolationAlgo algo = new InverseDistanceInterpolationAlgo();
    21             algo.Params = info;
    22             algo.Execute();
    23             //3、结果显示
    24             ILayer layer = LayerFactory.CreateDefaultLayer(info.m_sOutRasterFilePath);
    25             if (layer == null)
    26             {
    27                 MessageBox.Show("执行失败");
    28                 return;
    29             }
    30             m_HookHelper.FocusMap.AddLayer(layer);
    31             m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    32             (fDataset as IDisposable).Dispose();
    33             fDataset = null;
    34         }
    View Code

    2.4. 示例截图

     

  • 相关阅读:
    微信:JSSDK开发
    JSSDK图像接口多张图片上传下载并将图片流写入本地
    微信JSSDK上传多张图片
    laravel自定义公共函数的引入
    php把数据转换为json格式
    laravel控制器方法中,用函数作为变量进行传递时的处理方法
    ckeditor富文本编辑器的基本配置设置:
    laravel处理菜单保持的方法:
    laravel基于Bootstrap的成功和失败的提示信息和验证提示信息
    laravel Eloquent 查询数据库判断获取的内容是否为空
  • 原文地址:https://www.cnblogs.com/PIESat/p/10150884.html
Copyright © 2011-2022 走看看