栅格数据重分级,返回结果栅格数据集。
命名空间:
SuperMap.Analyst.SpatialAnalyst程序集: SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll
语法
C# |
---|
public static DatasetGrid Reclass( DatasetGrid sourceDataset, ReclassMappingTable reclassMappingTable, ReclassPixelFormat reclassPixelFormat, Datasource targetDatasource, string targetDatasetName ) |
参数
- sourceDataset
- Type: SuperMap.Data..::.DatasetGrid
指定的进行重分级操作的栅格数据集。
- reclassMappingTable
- Type: SuperMap.Analyst.SpatialAnalyst..::.ReclassMappingTable
指定的栅格重分级映射表。
- reclassPixelFormat
- Type: SuperMap.Analyst.SpatialAnalyst..::.ReclassPixelFormat
指定的结果数据集的像元值的存储类型。
- targetDatasource
- Type: SuperMap.Data..::.Datasource
指定的存储结果数据集的数据源。
- targetDatasetName
- Type: System..::.String
指定的结果数据集的名称。
返回值
结果栅格数据集。备注
栅格重分级就是对源栅格数据的栅格值进行重新分类和按照新的分类标准赋值,其结果是用新的值取代了栅格数据的原栅格值。对于已知的栅格数据,有时为了便于看清趋势,找出栅格值的规律,或者为了方便进一步的分析,重分级是很必要的:
- 通过重分级,可以使用新值来替代单元格的旧值,以达到更新数据的目的。例如,在处理土地类型变更时,将已经开垦为耕地的荒地赋予新的栅格值;
- 通过重分级,可以对大量的栅格值进行分组归类,同组的单元格赋予相同的值来简化数据。例如,将旱地、水浇地、水田等都归为农业用地;
- 通过重分级,可以对多种栅格数据按照统一的标准进行分类。例如,某个建筑物的选址的影响因素包括土壤和坡度,则对输入的土壤类型和坡度的栅格数据,可以按照 1-10 的等级标准来进行重分级,便于进一步的选址分析;
- 通过重分级,可以将某些不希望参与分析的单元格设为无值,也可以为原先为无值的单元格补充新测定的值,便于进一步的分析处理。
例如,常常需要对栅格表面进行坡度分析得到坡度数据,来辅助与地形有关的分析。但我们可能需要知道坡度属于哪个等级而不是具体的坡度数值,来帮助我们了解地形的陡峭程度,从而辅助进一步的分析,如选址、分析道路铺设线路等。此时可以使用重分级,将不同的坡度划分到对应的等级中。如下图所示,得到坡度图之后,通过重分级将坡度划分为了 8 个等级。
示例
以下代码示范了如何对栅格数据集进行重分级,获取分级后栅格数据集。除示例中使用的重分级映射表设置方式外,还可以通过导入已有的重分级映射表文件,请参考 ReclassMappingTable 类中的相关介绍。
CopyC#
private DatasetGrid GridReclass(DatasetGrid sourceDatasetGrid, Datasource targetDatasource) { //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除 String targetDatasetName = "resultReclass"; if (targetDatasource.Datasets.Contains(targetDatasetName)) { targetDatasource.Datasets.Delete(targetDatasetName); } //设置分级级数为8。将待分级栅格数据的最小值到最大值均分为8份,作为重分级区间集合 Int32 count = 8; ReclassSegment[] arraySegment = new ReclassSegment[count]; Double min = sourceDatasetGrid.MinValue; Double max = sourceDatasetGrid.MaxValue; Double interval = (max - min) / Convert.ToDouble(count); for (Int32 i = 0; i < count; i++) { arraySegment[i] = new ReclassSegment(); arraySegment[i].StartValue = min + i * interval; arraySegment[i].EndValue = min + (i + 1) * interval; arraySegment[i].NewValue = i + 10; arraySegment[i].SegmentType = ReclassSegmentType.CloseOpen; } //设置栅格重分级映射表 ReclassMappingTable reclassTable = new ReclassMappingTable(); reclassTable.ReclassType = ReclassType.Range; reclassTable.Segments = arraySegment; reclassTable.RetainMissingValue = false; reclassTable.ChangeMissingValueTo = max; reclassTable.RetainNoValue = true; //调用栅格重分级方法,并获取结果栅格数据集 DatasetGrid resultDatasetGrid = GeneralizeAnalyst.Reclass(sourceDatasetGrid, reclassTable, ReclassPixelFormat.Single, targetDatasource, targetDatasetName); return resultDatasetGrid; }