com.supermap.analyst.spatialanalyst
类 Interpolator

java.lang.Object
  继承者 com.supermap.analyst.spatialanalyst.Interpolator

public class Interpolator
extends java.lang.Object

插值分析类。该类提供插值分析功能,用于对离散的点数据进行插值得到栅格数据集。插值分析可以将有限的采样点数据,通过插值对采样点周围的数值情况进行预测,从而掌握研究区域内数据的总体分布状况,而使采样的离散点不仅仅反映其所在位置的数值情况,而且可以反映区域的数值分布。

为什么要进行插值?

由于地理空间要素之间存在着空间关联性,即相互邻近的事物总是趋于同质,也就是具有相同或者相似的特征,举个例子,街道的一边下雨了,那么街道的另一边在大多数情况下也一定在下雨,如果在更大的区域范围,一个乡镇的气候应当与其接壤的另一的乡镇的气候相同,等等,基于这样的推理,我们就可以利用已知地点的信息来间接获取与其相邻的其他地点的信息,而插值分析就是基于这样的思想产生的,也是插值重要的应用价值之一。

将某个区域的采样点数据插值生成栅格数据,实际上是将研究区域按照给定的格网尺寸(分辨率)进行栅格化,栅格数据中每一个栅格单元对应一块区域,栅格单元的值由其邻近的采样点的数值通过某种插值方法计算得到,因此,就可以预测采样点周围的数值情况,进而了解整个区域的数值分布情况。其中,插值方法主要有距离反比权值插值法、克吕金(Kriging)内插法、径向基函数RBF(Radial Basis Function)插值。

利用插值分析功能能够预测任何地理点数据的未知值,如高程、降雨量、化学物浓度、噪声级等等。

下面几幅图,就是利用采样点的高程数据进行插值分析得到栅格数据的示意图,其所使用的插值方法都是距离反比权值插值法,但所使用的分辨率不同。

如图一为插值使用的采样点数据,数值为高程值,利用距离反比权值插值法,分辨率为3000米所得的插值结果如图二所示,每个栅格单元中的数值为栅格单元的值,这些值都是由采样点的数值插值得出的,由此可以大致地了解这块区域地形的高低状况。当设置更高的分辨率后,地形的起伏趋势将更加清晰化,图三为1000米分辨率,图四为30米分辨率,因此设置合理的分辨率值以及合适的插值算法,就可以从有限的采样点数据中,挖据出更多的信息。

图一 采样点数据及高程值

图二 3000米分辨率插值后的结果,并标注出每个栅格单元高程值

图三 1000米分辨率插值后的结果

图四 30米分辨率插值后的结果


方法摘要
 void addSteppedListener(SteppedListener l)
          添加一个进度条事件(SteppedEvent)的监听器。
static GridAnalystSetting getAnalystSetting()
          返回栅格分析的环境设置对象。
static DatasetGrid interpolate(InterpolationParameter parameter, DatasetVector interpolatedPoint, java.lang.String zValueFieldName, double zValueScale, Datasource targetDatasource, java.lang.String targetDatasetName, PixelFormat pixelFormat)
          对点数据集进行插值分析,并返回分析结果。
static DatasetGrid interpolate(InterpolationParameter parameter, Point2D[] points, double[] values, PrjCoordSys prjCoordSys, double zValueScale, Datasource targetDatasource, java.lang.String targetDatasetName, PixelFormat pixelFormat)
          对点数组进行插值分析,并返回分析结果。
static DatasetGrid interpolate(InterpolationParameter parameter, Recordset interpolatedPointRecordset, java.lang.String zValueFieldName, double zValueScale, Datasource targetDatasource, java.lang.String targetDatasetName, PixelFormat pixelFormat)
          对点记录集进行插值分析,并返回分析结果。
 void removeSteppedListener(SteppedListener l)
          移除一个进度条事件(SteppedEvent)的监听器。
static void setAnalystSetting(GridAnalystSetting gridAnalystSetting)
          设置栅格分析的环境设置对象。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

getAnalystSetting

public static GridAnalystSetting getAnalystSetting()
返回栅格分析的环境设置对象。

有关“栅格分析环境设置”请参见 GridAnalystSetting 类的介绍。

返回:
栅格分析的环境设置对象。

setAnalystSetting

public static void setAnalystSetting(GridAnalystSetting gridAnalystSetting)
设置栅格分析的环境设置对象。

有关“栅格分析环境设置”请参见 GridAnalystSetting 类的介绍。

参数:
gridAnalystSetting - 栅格分析的环境设置对象。

interpolate

public static DatasetGrid interpolate(InterpolationParameter parameter,
                                      Point2D[] points,
                                      double[] values,
                                      PrjCoordSys prjCoordSys,
                                      double zValueScale,
                                      Datasource targetDatasource,
                                      java.lang.String targetDatasetName,
                                      PixelFormat pixelFormat)
对点数组进行插值分析,并返回分析结果。

参数:
parameter - 指定插值方法需要的参数信息。
points - 需要进行插值分析的点数组。
values - 点数组对应的用于插值分析的值。
prjCoordSys - 点数组的坐标系统。生成的结果数据集也参照该坐标系统。
zValueScale - 对用于进行插值分析值的缩放比率。参加插值分析的值将乘以该参数值后再进行插值,也就是对进行插值分析的值进行统一的扩大或缩小。
targetDatasource - 用于存放结果数据集的数据源。
targetDatasetName - 指定结果数据集的名称。
pixelFormat - 指定结果栅格数据集存储的像素格式。方法中此参数不支持 Bit64 像素格式。
返回:
插值分析得到的栅格数据集。

interpolate

public static DatasetGrid interpolate(InterpolationParameter parameter,
                                      DatasetVector interpolatedPoint,
                                      java.lang.String zValueFieldName,
                                      double zValueScale,
                                      Datasource targetDatasource,
                                      java.lang.String targetDatasetName,
                                      PixelFormat pixelFormat)
对点数据集进行插值分析,并返回分析结果。

注意:

对于点密度插值(InterpolationAlgorithmType.DENSITY),由于点密度插值是根据插值点的分布状态进行插值而不是根据插值点的字段值插值,因此在进行点密度插值时,zValueFieldName 参数所指定的字段的含义为每个插值点在密度插值过程中的权重,可将所有点此字段值设置为 1,即所有点在整体插值中权重相同。

参数:
parameter - 指定插值方法需要的参数信息。
interpolatedPoint - 需要进行插值分析的点数据集。
zValueFieldName - 存储用于进行插值分析的值的字段名称。插值分析不支持文本类型的字段。
zValueScale - 对用于进行插值分析值的缩放比率。
targetDatasource - 用于存放结果数据集的数据源。
targetDatasetName - 指定结果数据集的名称。
pixelFormat - 指定结果栅格数据集存储的像素格式,像素格式请参见 PixelFormat 类。其中该方法此参数不支持 BIT64 格式。
返回:
插值分析得到的栅格数据集。
另请参见:
PixelFormat
示例:
以下代码示范了对点数据集进行插值分析,并且选择距离反比权值插值法进行插值.假设名为 ElevationPoints 数据源中存在一个名称为 elevationpoints 的点数据集,数据集中的“ELEV”字段存储了点数据的高程信息。
 public void interpolationIDW()
{

    // 返回用来进行插值分析的点数据集
    Workspace workspace = new Workspace();
    DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo("G:\\Data\\ElevationPoints.udb", "ElevationPoints", "");
    Datasource targetDatasource = workspace.getDatasources().open(datasourceConnectionInfo);
    DatasetVector datasetElevPoints = (DatasetVector)targetDatasource.getDatasets().get("elevationpoints");

    // 返回一个合法的名称作为结果数据集的的名称
    String resultDatasetName = targetDatasource.getDatasets().getAvailableDatasetName("resultDatasetGrid");

    //设置距离反比权值插值参数
    InterpolationIDWParameter interpolationMethodIDWParam = new InterpolationIDWParameter();
    interpolationMethodIDWParam.setExpectedCount(5);
    interpolationMethodIDWParam.setBounds( datasetElevPoints.getBounds());
    interpolationMethodIDWParam.setPower ( 2);
    interpolationMethodIDWParam.setResolution (  285);
    interpolationMethodIDWParam.setSearchMode (  SearchMode.KDTREE_FIXED_COUNT);

    // 调用插值分析类的插值分析方法实现对点数据集的插值,并返回分析结果
    DatasetGrid resultInterpolationGrid = Interpolator.interpolate(interpolationMethodIDWParam, datasetElevPoints, "ELEV", 0.7, targetDatasource, resultDatasetName, PixelFormat.SINGLE);

    // 释放工作空间占有的资源
    workspace.dispose();
}

interpolate

public static DatasetGrid interpolate(InterpolationParameter parameter,
                                      Recordset interpolatedPointRecordset,
                                      java.lang.String zValueFieldName,
                                      double zValueScale,
                                      Datasource targetDatasource,
                                      java.lang.String targetDatasetName,
                                      PixelFormat pixelFormat)
对点记录集进行插值分析,并返回分析结果。

注意:

对于点密度插值(InterpolationAlgorithmType.DENSITY),由于点密度插值是根据插值点的分布状态进行插值而不是根据插值点的字段值插值,因此在进行点密度插值时,zValueFieldName 参数所指定的字段的含义为每个插值点在密度插值过程中的权重,可将所有点此字段值设置为 1,即所有点在整体插值中权重相同。

参数:
parameter - 指定插值方法需要的参数信息。
interpolatedPointRecordset - 需要进行插值分析的点记录集。
zValueFieldName - 存储用于进行插值分析的值的字段名称。插值分析不支持文本类型的字段。
zValueScale - 对用于进行插值分析值的缩放比率。
targetDatasource - 用于存放结果数据集的数据源。
targetDatasetName - 指定结果数据集的名称。
pixelFormat - 指定结果栅格数据集存储的像素格式,像素格式请参见 PixelFormat 类。其中该方法此参数不支持 BIT64 格式。
返回:
插值分析得到的栅格数据集。
另请参见:
PixelFormat
示例:
以下代码示范了对点数据集进行插值分析,并且选择克吕金插值法进行插值,假设名为ElevationPoints数据源中存在一个名称为elevationpoints的点数据集,数据集中的“ELEV”字段存储了点数据的高程信息。
 public void interpolationKriging()
{
    // 返回用来进行插值分析的点数据集
    Workspace workspace = new Workspace();
    DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo("G:\\Data\\ElevationPoints.udb", "ElevationPoints", "");
    Datasource targetDatasource = workspace.getDatasources().open(datasourceConnectionInfo);
    DatasetVector datasetElevPoints = (DatasetVector)targetDatasource.getDatasets().get("elevationpoints");

    //返回一个合法的名称作为结果数据集的的名称
    String resultDatasetName = targetDatasource.getDatasets().getAvailableDatasetName("resultDatasetGrid");

    //设置克吕金内插法参数
    InterpolationKrigingParameter interpolationMethodKrigingParam = new InterpolationKrigingParameter();
    interpolationMethodKrigingParam.setExpectedCount (5);
    interpolationMethodKrigingParam.setBounds(datasetElevPoints.getBounds());
    interpolationMethodKrigingParam.setResolution ( 285);
    interpolationMethodKrigingParam.setSearchMode  ( SearchMode.KDTREE_FIXED_COUNT);
    interpolationMethodKrigingParam.setVariogramMode  ( VariogramMode.EXPONENTIAL);

    //调用插值分析类的插值分析方法实现对点数据集的插值,并返回分析结果
    DatasetGrid resultInterpolationGrid = Interpolator.interpolate(interpolationMethodKrigingParam, datasetElevPoints, "ELEV", 0.7, targetDatasource, resultDatasetName, PixelFormat.SINGLE);

    //释放工作空间占有的资源
    workspace.dispose();
}

addSteppedListener

public void addSteppedListener(SteppedListener l)
添加一个进度条事件(SteppedEvent)的监听器。

参数:
l - 一个用于接收进度条事件的监听器。

removeSteppedListener

public void removeSteppedListener(SteppedListener l)
移除一个进度条事件(SteppedEvent)的监听器。

参数:
l - 一个用于接收进度条事件的监听器。