地形模型匹配,根据模型的高程对 DEM 地形进行修改(填挖)使之与模型贴合。

命名空间:  SuperMap.Realspace.SpatialAnalyst
程序集:  SuperMap.Realspace.SpatialAnalyst (in SuperMap.Realspace.SpatialAnalyst)
版本: dll

语法

C#
public static DatasetGrid GridMatch(
	DatasetGrid sourceDatasetGrid,
	DatasetVector sourceDatasetVector,
	Datasource targetDatasource,
	string targetDatasetName,
	string altiFieldName,
	double radius,
	double exp
)

参数

sourceDatasetGrid
Type: SuperMap.Data..::.DatasetGrid
指定的与三维模型进行匹配的地形数据,即 DEM 栅格数据。
sourceDatasetVector
Type: SuperMap.Data..::.DatasetVector
指定的模型数据。可以是 CAD 数据集或面数据集。
targetDatasource
Type: SuperMap.Data..::.Datasource
指定的用于存储结果数据集的数据源。
targetDatasetName
Type: System..::.String
指定的结果数据集的名称。
altiFieldName
Type: System..::.String
指定的模型数据的高程字段。详细说明见备注部分。
radius
Type: System..::.Double
指定的过渡区域的半径,单位为米。半径的起点为模型对应地形的边缘,对该过渡地带的地形进行平滑过渡处理。有效值范围为大于等于0,设置为0表示不进行平滑过渡处理。
exp
Type: System..::.Double
指定的幂次。取值范围为大于等于0。设置为负数会抛出异常。为0使表示不对模型周围的缓冲地带进行平滑过渡。建议范围为(0,3]。

返回值

根据模型进行匹配后的 DEM 数据集。

备注

有关地形模型匹配的详细介绍请参见 GridMatchAnalyst 类的介绍。

  • 模型底部高程如何确定?
  • 该方法支持输入两种模型数据(sourceDatasetVector 参数):CAD 数据集和矢量面数据集。输入 CAD 数据集,该方法将直接处理模型与地形的匹配,输入面数据集时,实际上是将模型底部或者模型所覆盖的区域绘制成了矢量面来进行地形模型匹配。地形模型匹配时,会根据模型底部或面对象的高程对其所覆盖的地形区域进行填方或者挖方,模型底部或面对象的高程通过以下方式获得:

    1. 当输入 CAD 数据集时,模型覆盖区域匹配后的高程是由模型的包围盒的中心点所对应的地形位置的高程决定的,需要将 altiFieldName 参数设置为空字符串(注意不是 null)
    2. 如果输入的是一个矢量面数据集时,可通过 altiFieldName 参数指定一个属性字段作为面对象的高程值,也可以将 altiFieldName 参数设置为空字符串(注意不是null),那么系统会计算该面对象的最小外接矩形(Bounds)的中心位置所对应的地形栅格单元格的高程值作为进行匹配的高程。
  • 模型数据的选择
    1. 由于 CAD 模型的包围盒的底面总是一个矩形,往往与模型实际覆盖范围不一致,包含了一些透明区域,如下图所示,是在三维场景中选中一个 CAD 模型时的状态,很明显,模型的包围盒所覆盖的地形范围比模型实际覆盖范围要大,该方法在进行地形模型匹配时,将会按照模型的包围盒的范围对地形进行修改,因此可能会导致地形处理不理想。因此应尽量选择模型的包围盒与模型实际范围一致的 CAD 模型数据,或者将模型底部区域绘制为矢量面作为输入数据。
    2. 当输入的模型数据中的 CAD 模型或者面对象出现相交时,地形模型匹配的结果可能不正确。所以最好使用没有相交现象的数据作为地形模型匹配的输入数据。
  • 注意:
  • 当直接使用 CAD 模型进行地形模型匹配时,由于根据模型包围盒中心对应的地形高程对地形进行填挖,因此可能出现匹配后的地形与模型不能贴合,这时可通过设置高度模式(GeoStyle3D.AltitudeMode)和底部高程(GeoStyle3D.BottomAltitude)等属性使模型与地面贴合,从而获得更好的显示效果。

版本信息

SuperMap iObjects .NET


SuperMap Objects .NET

受以下版本支持: 6.1.3

请参见