栅格细化,通常在将栅格转换为矢量线数据前使用。
命名空间:
SuperMap.Analyst.SpatialAnalyst程序集: SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll
语法
C# |
---|
public static Dataset ThinRaster( Dataset sourceDataset, int backOrNoValue, double backOrNoValueTolerance, Datasource targetDatasource, string targetDatasetName ) |
参数
- sourceDataset
- Type: SuperMap.Data..::.Dataset
指定的待细化的栅格数据集。支持影像数据集。
- backOrNoValue
- Type: System..::.Int32
指定的指定栅格的背景色或表示无值的值。
- backOrNoValueTolerance
- Type: System..::.Double
栅格背景色的容限或无值的容限。
- targetDatasource
- Type: SuperMap.Data..::.Datasource
指定的用于存储结果数据集的数据源。
- targetDatasetName
- Type: System..::.String
指定的结果数据集的名称。
返回值
结果数据集。
备注
栅格数据细化处理可以减少栅格数据中用于标识线状地物的单元格的数量,从而提高矢量化的速度和精度。一般作为栅格转线矢量数据之前的预处理,使转换的效果更好。例如一幅扫描的等高线图上可能使用 5、6 个单元格来显示一条等高线的宽度,细化处理后,等高线的宽度就只用一个单元格来显示了,有利于更好地进行矢量化。
关于无值/背景色及其容限的说明
进行栅格细化时,允许用户标识那些不需要细化的单元格。对于栅格数据集,通过无值及其容限来确定这些值,对于影像数据集,则通过背景色及其容限来确定。
- 当对栅格数据集进行细化时,栅格值为 backOrNoValue 参数指定的值的单元格被视为无值,不参与细化,而栅格的原无值将作为有效值来参与细化;同时,在 backOrNoValueTolerance 参数指定的无值的容限范围内的单元格也不参与细化。例如,指定无值的值为 a,指定的无值的容限为 b,则栅格值在 [a-b,a+b] 范围内的单元格均不参与细化。
当对影像数据集进行细化时,栅格值为指定的值的单元格被视为背景色,不参与细化;同时,在 backOrNoValueTolerance 参数指定的背景色的容限范围内的单元格也不参与细化。
需要注意,影像数据集中栅格值代表的是一个颜色值,因此,如果想要将某种颜色设为背景色,为 backOrNoValue 参数指定的值应为将该颜色(RGB 值)转为 32 位整型之后的值,系统内部会根据像素格式再进行相应的转换。背景色的容限同样为一个 32 位整型值。该值在系统内部被转为分别对应 R、G、B 的三个容限值,例如,指定为背景色的颜色为 (100,200,60),指定的容限值为 329738,该值对应的 RGB 值为 (10,8,5),则值在 (90,192,55) 和 (110,208,65) 之间的颜色均不参与细化。
注意:对于栅格数据集,如果指定的无值的值,在待细化的栅格数据集的值域范围外,会分析失败,返回 null。
示例
以下代码示范了如何通过给定的数据源和栅格数据,将该栅格数据进行细化。

public Dataset ThinRasterData(Dataset sourceDataset, Datasource targetDatasource) { //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除 string targetDatasetName = "resultThinnedRaster"; if (targetDatasource.Datasets.Contains(targetDatasetName)) { targetDatasource.Datasets.Delete(targetDatasetName); } //调用栅格数据集细化方法,获取结果数据集 Dataset resultDatasetGrid = ConversionAnalyst.ThinRaster(sourceDataset, -9999, 0, targetDatasource, targetDatasetName); return resultDatasetGrid; }