public class InterpolationKrigingParameter extends InterpolationParameter
InterpolationParameter
类。该类为 Kriging 插值算法提供必要的参数信息,包括半变函数类型、自相关阈值、基台值、块金效应值。
Kriging 法为地质统计学上一种空间资料内插处理方法,主要的目的是利用各数据点间变异数(variance)的大小来推求某一未知点与各已知点的权重关系,再由各数据点的值和其与未知点的权重关系推求未知点的值。Kriging 法最大的特色不仅是提供一个最小估计误差的预测值,并且可明确的指出误差值的大小。一般而言,许多地质参数,如地形面本身即具有连续的性质,故在一短距离内的任两点必有空间上的关系。反之,在一不规则面上的两点若相距甚远,则在统计意义上可视为互为独立 (stastically indepedent),这种随距离而改变的空间上连续性,可用半变异图 (semivariogram) 来表现。因此,若想由已知的散乱点来推求某一未知点的值,则可利用半变异图推求各已知点及欲求值点的空间关系。再由此空间参数推求半变异数,由各数据点间的半变异数可推求未知点与已知点间的权重关系,进而推求出未知点的值。
克吕金法的优点是以空间统计学作为其坚实的理论基础。物理含义明确;不但能估计测定参数的空间变异分布,而且还可以估算参数的方差分布。克吕金法的缺点是计算步骤较烦琐,计算量大,且变异函数有时需要根据经验人为选定。
克吕金插值法可以采用两种方式来获取参与插值的采样点,进而获得相应位置点的预测值,一个是在待计算预测值位置点周围一定范围内,获取该范围内的所有采样点,通过特定的插值计算公式获得该位置点的预测值;另一个是在待计算预测值位置点周围获取一定数目的采样点,通过特定的插值计算公式获得该位置点的预测值。
克吕金插值过程是一个多步骤的处理过程,包括:
1.创建变异图和协方差函数来估计统计相关(也称为空间自相关)的值;
2.预测待计算位置点的未知值。
半变异函数与半变异图:
计算所有采样点中相距 h 个单位的任意两点的半变异函数值,那么任意两点的距离 h 一般是唯一的,将所有的点对的距离与相应的半变函数值快速显示在以 h 为 X 坐标轴和以半变函数值为 Y 坐标轴的坐标空间内,就得到了半变异图。相距距离愈小的点其半变异数愈小,而随着距离的增加,任两点间的空间相依关系愈小,使得半变异函数值趋向于一稳定值。此稳定值我们称之为基台值(Sill);而达到基台值时的最小 h 值称之为自相关阈值(Range)。
某半变异图
某半变异函数拟合曲线图
有关概念示意图
块金效应:
当点间距离为 0(比如,步长=0)时,半变函数值为 0。然而,在一个无限小的距离内,半变函数通常显示出块金效应,这是一个大于 0 的值。如果半变函数在Y周上的截距式 2 ,则块金效应值为 2。
块金效应属于测量误差,或者是小于采样步长的小距离上的空间变化,或者两者兼而有之。测量误差主要是由于观测仪器的内在误差引起的。自然现象的空间变异范围很大(可以在很小的尺度上,也可以在很大的尺度上)。小于步长尺度上的变化就表现为块金的一部分。
半变异图的获得是进行空间插值预测的关键步骤之一,克吕金法的主要应用之一就是预测非采样点的属性值,半变异图提供了采样点的空间自相关信息,根据半变异图,选择合适的半变异模型,即拟合半变异图的曲线模型。
不同的模型将会影响所获得的预测结果,如果接近原点处的半变异函数曲线越陡,则较近领域对该预测值的影响就越大。因此输出表面就会越不光滑。
SuperMap 支持的半变函数模型有指数型、球型和高斯型。详细信息参见 VariogramMode
类。
完成模型的确定后,就可以使用选定的模型,对采样点数据进行插值分析了。
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(); }
构造器和说明 |
---|
InterpolationKrigingParameter()
构造一个 InterpolationKrigingParameter 的新对象。
|
InterpolationKrigingParameter(double resolution,
SearchMode searchMode,
double searchRadius,
int expectedCount,
VariogramMode variogramMode)
根据指定的参数来构造一个 InterpolationKrigingParameter 的新对象。
|
InterpolationKrigingParameter(InterpolationAlgorithmType type)
根据指定的参数来构造一个 InterpolationKrigingParameter 的新对象。
|
InterpolationKrigingParameter(InterpolationAlgorithmType type,
double resolution,
SearchMode searchMode,
double searchRadius,
int expectedCount,
VariogramMode variogramMode)
根据指定的参数来构造一个 InterpolationKrigingParameter 的新对象。
|
限定符和类型 | 方法和说明 |
---|---|
double |
getAngle()
返回克吕金算法中旋转角度值。
|
Exponent |
getExponent()
返回用于插值的样点数据中趋势面方程的阶数。
|
double |
getMean()
返回插值字段的平均值,即采样点插值字段值总和除以采样点数目。
|
double |
getNugget()
返回块金效应值。
|
double |
getRange()
返回自相关阈值。
|
double |
getSill()
返回基台值。
|
InterpolationAlgorithmType |
getType()
返回插值算法类型。
|
VariogramMode |
getVariogramMode()
返回克吕金(Kriging)插值时的半变函数类型。
|
void |
setAngle(double value)
设置克吕金算法中旋转角度值。
|
void |
setExponent(Exponent exponent)
设置用于插值的样点数据中趋势面方程的阶数。
|
void |
setMean(double value)
设置插值字段的平均值,即采样点插值字段值总和除以采样点数目。
|
void |
setNugget(double value)
设置块金效应值。
|
void |
setRange(double value)
设置自相关阈值。
|
void |
setSill(double value)
设置基台值。
|
void |
setVariogramMode(VariogramMode variogramMode)
设置克吕金(Kriging)插值时的半变函数类型。
|
String |
toString()
返回一个表示 InterpolationKrigingParameter 对象的字符串。
|
dispose, getBounds, getExpectedCount, getMaxPointCountForInterpolation, getMaxPointCountInNode, getResolution, getSearchMode, getSearchRadius, setBounds, setExpectedCount, setMaxPointCountForInterpolation, setMaxPointCountInNode, setResolution, setSearchMode, setSearchRadius
public InterpolationKrigingParameter()
public InterpolationKrigingParameter(InterpolationAlgorithmType type)
type
- 指定的插值分析的算法类型。public InterpolationKrigingParameter(double resolution, SearchMode searchMode, double searchRadius, int expectedCount, VariogramMode variogramMode)
resolution
- 指定的插值运算所获得的栅格数据集的分辨率。searchMode
- 指定的插值运算时查找参与运算点的查找方式。searchRadius
- 指定的插值运算时查找参数运算点的查找范围。expectedCount
- 指定的参与插值运算的点数。variogramMode
- 指定的半变函数类型。public InterpolationKrigingParameter(InterpolationAlgorithmType type, double resolution, SearchMode searchMode, double searchRadius, int expectedCount, VariogramMode variogramMode)
type
- 指定的插值分析算法类型。resolution
- 指定的插值运算所获得的栅格数据集的分辨率。searchMode
- 指定的插值运算时查找参与运算点的查找方式。searchRadius
- 指定的插值运算时查找参数运算点的查找范围。expectedCount
- 指定的参与插值运算的点数。variogramMode
- 指定的半变函数类型。public VariogramMode getVariogramMode()
目前支持球型函数、指数函数和高斯函数类型,详情请参见 VariogramMode
类型。
VariogramMode
VariogramMode.SPHERICAL
。public void setVariogramMode(VariogramMode variogramMode)
variogramMode
- 克吕金插值时的半变函数类型。VariogramMode
public double getRange()
自相关阈值是指当一个半变函数在达到一定距离的时候,曲线的趋势不能够再增长,即趋于水平,那么曲线最初开始水平的距离称为自相关阈值。
public void setRange(double value)
自相关阈值是指当一个半变函数在达到一定距离的时候,曲线的趋势不能够再增长,即趋于水平,那么曲线最初开始水平的距离称为自相关阈值。
value
- 自相关阈值。public double getSill()
基台值是指半变函数达到变长范围时,Y 轴上的值。
有关概念示意图:
public void setSill(double value)
半变异函数值趋向于一稳定值时,此稳定值我们称之为基台值。
有关概念示意图:
value
- 基台值。public double getAngle()
public void setAngle(double value)
value
- 旋转角度值。public double getNugget()
当点间距离为 0(比如,步长=0)时,半变函数值为 0。然而,在一个无限小的距离内,半变函数通常显示出块金效应,这是一个大于 0 的值。如果半变函数在 Y 轴上的截距是 2 ,则块金为 2。
块金效应属于测量误差,或者是小于采样步长的小距离上的空间变化,或者两者兼而有之。测量误差主要是由于观测仪器的内在误差引起的。自然现象的空间变异范围很大(可以在很小的尺度上,也可以在很大的尺度上)。小于步长尺度上的变化就表现为块金的一部分。
有关概念示意图:
public void setNugget(double value)
当点间距离为 0(比如,步长=0)时,半变函数值为 0。然而,在一个无限小的距离内,半变函数通常显示出块金效应,这是一个大于 0 的值。如果半变函数在 Y 轴上的截距是 2 ,则块金为 2。
块金效应属于测量误差,或者是小于采样步长的小距离上的空间变化,或者两者兼而有之。测量误差主要是由于观测仪器的内在误差引起的。自然现象的空间变异范围很大(可以在很小的尺度上,也可以在很大的尺度上)。小于步长尺度上的变化就表现为块金的一部分。
有关概念示意图:
value
- 块金效应值。public double getMean()
public void setMean(double value)
value
- 插值字段的平均值。public Exponent getExponent()
Exponent
类。此属性只适用于泛克吕金方法。Exponent.EXP1
。public void setExponent(Exponent exponent)
Exponent
类。此属性只适用于泛克吕金方法。exponent
- 指定的用于插值的样点数据中趋势面方程的阶数。public InterpolationAlgorithmType getType()
getType
在类中 InterpolationParameter
InterpolationAlgorithmType
public String toString()
toString
在类中 InterpolationParameter
Copyright © 2021–2024 SuperMap. All rights reserved.