1、牟乃夏 ArcGIS Engine 地理信息系统开发教程 配套PPT- 第8章 栅格数据空间分析,目录,1. 环境设置 2. 空间插值 3. 栅格表面分析 4. 栅格计算 5. 栅格统计 6. 密度分析 7. 提取分析 8. 距离分析 9. 重分类 10.条件分析,简介,栅格数据分析是空间分析的重要组成部分。栅格数据具有属性明显、位置隐含的特点,在表达连续地理现象的空间分布、进行空间分析和地表模拟等方面具有较强的优势。栅格分析常用的方法有:空间插值、栅格表面分析、栅格计算、密度分析、提取分析、距离分析、重分类和条件分析等。在实际应用中,针对不同的应用需求各种分析所占的比重也不尽相同。但通常情况
2、下,需要综合运用多种栅格数据的分析方法并且结合矢量数据的空间分析来完成一个完整的数据分析过程。,1. 环境设置,在ArcGIS中,栅格数据空间分析是扩展模块。同样,要使用ArcGIS Engine实现栅格数据的空间分析功能,需使用ArcGIS Engine Runtime的Spatial Analyst许可。,1. 环境设置,在进行空间插值、密度分析等空间分析之前,应先设置分析环境。分析环境的设置主要有以下四个方面:输出像元大小、处理范围、掩膜和输出数据的空间参考等。分析环境的设置主要通过IRasterAnalysisEnvironment接口实现。 所有栅格数据空间分析的类都能实现IRast
3、erAnalysisEnvironment接口,如:,RasterDensityOpClass(密度分析类)、RasterDistanceOpClass (距离分析类)、RasterExtractionOpClass (提取分析类)、RasterInterpolationOpClass(插值分析类)、RasterMathOpsClass (栅格计算类)、RasterReclassOpClass(重分类)、RasterSurfaceOpClass(表面分析类)及RasterConditionalOpClass (条件分析类)等。,1. 环境设置,IRasterAnalysisEnvironmen
4、t接口的属性和方法 (1)SetCellSize方法 设置输出栅格数据的像元大小。 (2)SetExtent方法 设置栅格分析的处理范围。 (3)Mask属性 使空间分析只对选定的数据进行处理。 (4)OutSpatialReference属性 输出数据的空间参考,默认为输入数据的空间参考。 (5)OutWorkspace属性 空间分析的输出工作空间,默认为系统临时工作空间。,2. 空间插值,空间插值是根据有限的样本点数据来预测栅格数据中其他单元的值,插值的假定条件是空间上分布的现象具有空间相关性。 在ArcGIS Engine中,RasterInterpolationOpClass类实现了空
5、间插值分析。该类实现了两个主要的接口,分别是IRasterAnalysisEnvironment接口和IInterpolationOp2接口。 IInterpolationOp2接口实现了所有空间插值的方法,分别为: (1)IDW(反距离权重法) (2)Krige(克里金法) (3)Spline(样条函数法) (4)Trend(趋势面法) (5)NaturalNeighbor(自然邻域法) (6)TopoToRasterByFile(通过文件实现地形转栅格) (7)Variogram(变异函数法),2. 空间插值,(1)IDW(反距离权重法) IDW插值是一种简单、常用的空间插值方法,它以插值
6、点与样本点之间的距离为权重进行加权平均,离插值点越近的样本点赋予的权重越大。反距离插值法是通过调用IInterpolationOp2接口的IDW方法实现的。,该方法的原型为: public IGeoDataset IDW (IGeoDatasetgeo Data, double power, IRasterRadius radius, ref object barrier); 它有四个参数,分别是: (1)IGeoDataset geoData 输入的包含Z值的点要素数据集。 (2)double power 用于控制内插值周围点的显著性。幂值越高,对元数据 点的影响会越小。它可以是任何大于 0
7、 的实数,但使用从 0.5 到 3 的值可以获得最合理的结果。 (3)IRasterRadius radius 搜索半径,有“固定”和“变量”两个选项。 (4)ref object barrier 在搜索输入采样点时用作中断或限制的折线要素。,2. 空间插值,IDW插值实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方法设置插值的Z值字段; (3)通过IRasterRadius接口设置搜索半径; (4)调用IInterpolationOp2接口的IDW方法
8、,返回IDW插值结果; (5)显示IDW插值结果数据。,IDW插值结果,详细代码见程序,2. 空间插值,(2)Krige(克里金法) Krige插值的基本原理是根据相邻变量的值,利用变异函数揭示的区域变量的内在联系来预测空间变量的值。利用克里金法进行预测时分为两步: 第一步是对已知点进行结构分析,揭示相关性规律,提出变异函数类型; 第二步是在该模型基础上进行预测。,克里金法是通过调用IInterpolationOp2接口的Krige方法实现,该方法的原型为: public IGeoDataset Krige (IGeoDatasetgeo Data,esriGeoAnalysisSemiVar
9、iogramEnum semiVariogramType,IRasterRadius radius, bool outSemiVariance,ref object barrier); 它有五个参数,分别是: (1)IGeoDatasetgeo Data 输入的包含Z值的点要素数据集。 (2)esriGeoAnalysisSemiVariogramEnum semiVariogramType 半变异函数属性 (3)IRasterRadiusradius 搜索半径,有“固定”和“变量”两个选项。 (4)bool outSemiVariance 输出的结果是否包含该位置的预测半方差值。 (5)re
10、f object barrier在搜索输入采样点时用作中断或限制的折线要素。,2. 空间插值,Krige插值的实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方法设置插值的Z值字段; (3)选择esriGeoAnalysisSemiVariogramEnum类型; (4)通过IRasterRadius接口设置搜索半径; (5)调用IInterpolationOp2接口的Krige方法,返回Krige插值结果; (6)显示Krige插值结果数据。,2. 空间
11、插值,样条函数法(Spline) Spline插值利用最小化表面总曲率的数学函数来估计值,从而生成恰好经过输入点的平滑表面。这种方法很好地模拟了高程、水位高度或污染物浓度这样的渐变曲面。,样条函数法是通过调用IInterpolationOp2接口的Spline方法实现,该方法的原型为: public IGeoDataset Spline ( IGeoDatasetgeo Data, esriGeoAnalysisSplineEnum splineType,ref object weight, ref object numPoints); 它有四个参数,分别是: (1)IGeoDataset g
12、eoData 输入的包含Z值的点要素数据集。 (2)esriGeoAnalysisSplineEnum splineType 要使用的样条函数类型。 (3)ref objectweight 影响表面插值特性的参数。 (4)ref objectnumPoints 用于局部近似的每个区域的点数。,2. 空间插值,Spline插值实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方法设置插值的Z值字段; (3)选择esriGeoAnalysisSplineEnum
13、类型; (4)设置权重(weight)和点数(numPoints); (5)调用IInterpolationOp2接口的Spline方法,返回Spline插值结果; (6)显示Spline插值结果数据。,2. 空间插值,趋势面法(Trend) Trend插值是针对大量离散的点信息,从整体插值出发,来进行趋势渐变特征分析的最简单的方法。趋势面分析一般是采取多项式进行回归分析,通过全局多项式插值法将由数学函数(多项式)定义的平滑表面与输入采样点进行拟合。,趋势面法是通过调用IInterpolationOp2接口的Trend方法实现,该方法的原型为: public IGeoDataset Trend
14、 ( IGeoDatasetgeo Data, esriGeoAnalysisTrendEnum trendType, int order); 它有三个参数,分别是: (1)IGeoDataset geoData输入的包含Z值得点要素数据集。 (2)esriGeoAnalysisTrendEnum trendType 要执行的回归类型。 (3)int order 多项式的阶。,2. 空间插值,Trend插值实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方
15、法设置插值的Z值字段; (3)选择esriGeoAnalysisTrendEnum类型; (4)设置多项式的阶(order); (5)调用IInterpolationOp2接口的Trend方法,返回Trend插值结果; (6)显示Trend插值结果数据。,2. 空间插值,自然邻域法(NaturalNeighbor) NaturalNeighbor插值通过算法找到距查询点最近的输入样本子集,并根据区域的大小对这些样本运用权重进行插值。该插值方法仅使用查询点周围的样本子集,且保证插值高度在所使用的样本范围之内,不会推断表面趋势且不能生成输入样本中未表示出的山峰、凹地、山脊或山谷等地形。,自然邻域法
16、是通过调用IInterpolationOp2接口的NaturalNeighbor方法实现,该方法的原型为: public IGeoDataset NaturalNeighbor (IGeoDatasetgeo Dataset); 它只有一个参数: IGeoDataset geoData输入的包含Z值得点要素集。 NaturalNeighbor插值实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方法设置插值的Z值字段; (3)调用IInterpolation
17、Op2接口的NaturalNeighbor方法,返回NaturalNeighbor插值结果; (4)显示NaturalNeighbor插值结果数据。,2. 空间插值,自然邻域法(NaturalNeighbor) 核心代码如下:/NaturalNeighbor插值private void btnNaturalNeighbor_Click(object sender, EventArgs e)interOp = rasterEnv as IInterpolationOp2;outGeodataset = interOp.NaturalNeighbor(inGeodataset);/自然邻域法Sho
18、wResult(outGeodataset, “NaturalNeighbor “);,NaturalNeighbor插值结果,3. 栅格表面分析,表面分析是为了返回原始数据中隐含的一些空间信息,如获取表面的坡度、坡向、等值线、山体阴影和视域等数据集。 在ArcGIS Engine中,通过RasterSurfaceOpClass类实现栅格数据的表面分析。该类实现了两个主要的接口,分别是IRasterAnalysisEnvironment接口和ISurfaceOp接口,ISurfaceOp接口包含栅格数据表面分析的所有方法,主要有: (1)Slope(坡度) (2)Aspect(坡向) (3)C
19、ontour(等值线) (4)CutFill(填挖方) (5)HillShade(山体阴影) (6)Curvature(曲率) (7)Visibility(可见性) (8)ContourAsPolyline(创建过一点的单条等值线) (9)ContourList(等值线序列) (10)ContoursAsPolylines(创建过点集的多条等值线),3. 栅格表面分析,坡度(Slope) 坡度是指通过地表面任意一点的切平面与水平表面之间的夹角,常用来计算任一单元和邻域单元间变化的最大比率。输出数据中的每个单元都有一个坡度值,坡度值较低则表明地势较平坦,坡度值较高则地势较陡峭。,坡度计算是通过调
20、用ISurfaceOp接口的Slope方法实现的,该方法的原型为: public IGeoDataset Slope (IGeoDatasetgeo Dataset,esriGeoAnalysisSlopeEnum slopeType, ref object zFactor); 它有三个参数,分别为: (1)IGeoDataset geoData输入的栅格数据集。 (2)esriGeoAnalysisSlopeEnum slopeType 坡度单位。 (3)ref object zFactor Z因子。,3. 栅格表面分析,返回坡度需要用到esriGeoAnalysisSlopeEnum枚举类
21、型,用来确定输出坡度数据的测量单位。包含DEGREE(度)和PERCENT_RISE(高程增量百分比)两种单位类型。 坡度计算的实现思路如下: (1)获取输入栅格数据集IGeoDataset; (2)选择esriGeoAnalysisSlopeEnum输出单位类型; (3)调用ISurfaceOp接口的Slope方法,返回坡度数据集; (4)显示坡度数据。,3. 栅格表面分析,坡向(Aspect) 坡向是指地表面上一点的切平面的法线矢量在水平面的投影与过该点的正北方向的夹角。对于地面任何一点而言,坡向表征了该点高程值改变量的最大变化方向。,坡向计算是通过调用ISurfaceOp接口的Aspec
22、t方法实现的,该方法的原型为: public IGeoDataset Aspect (IGeoDatasetgeo Dataset); 该方法只有一个参数: IGeoDataset geoData输入的栅格数据集。,3. 栅格表面分析,坡向计算的实现思路如下: (1)获取输入栅格数据集IGeoDataset; (2)调用ISurfaceOp接口的Aspect方法,返回坡向数据集; (3)显示坡向数据。,3. 栅格表面分析,等值线(Contour) 等值线就是将表面上相邻的等值点(如高程、温度、降水、大气压力等)连接起来的线。等值线分布的疏密在一定程度上表明了等值线的变化情况。,等值线计算是通过
23、调用ISurfaceOp接口的Contour方法实现的,该方法的原型为: public IGeoDataset Contour (IGeoDatasetgeo Dataset, double interval, ref object base); 该方法有三个参数,分别是: (1)IGeoDataset geoData输入的栅格数据集。 (2)double interval 等值线间距。 (3)ref objectbase 起始等值线,默认值为0。,3. 栅格表面分析,等值线计算的实现思路如下: (1)获取输入栅格数据集IGeoDataset; (2)设置等值线间距(interval)和起始等
24、值线(base); (3)调用ISurfaceOp接口的Contour方法,返回等值线数据集; (4)显示等值线数据。,3. 栅格表面分析,填挖方(CutFill) 填挖操作是一个通过添加或移除表面物质来修改地表高程的过程。通过给定两个不同的表面,填挖函数会生成一个栅格数据,来显示地面物质增加、减少或者不变的区域。负的体积值表明该区域已被填充,正的体积值表明该地区已发生移除。,填挖方计算是通过调用ISurfaceOp接口的CutFill方法实现的,该方法的原型为: public IGeoDataset CutFill (IGeoDataset beforeGeoDataset,IGeoData
25、set afterGeoDataset, ref object zFactor); 该方法有三个参数,分别是: (1)IGeoDataset beforeGeoDataset 输入填/挖之前的栅格数据集。 (2)IGeoDataset afterGeoDataset输入填/挖之后的栅格数据集。 (3)ref object zFactor Z因子。,3. 栅格表面分析,填挖方计算的实现思路如下: (1)获取输入填/挖之前的栅格数据IGeoDataset及填/挖之后的栅格数据IGeoDataset; (2)调用ISurfaceOp接口的CutFill方法,返回填挖方数据; (3)显示填挖方数据。,
26、填挖方计算结果,3. 栅格表面分析,山体阴影(HillShade) 山体阴影通过考虑照明源的角度和阴影,根据表面栅格创建晕染地貌。它根据假想的照明光源对高程栅格图运用山影函数,计算每个单元以及相关邻域单元的照明值,很好地表达了地形的立体形态,而且可以提取地形遮蔽信息。在创建山体阴影时,主要考虑光源方位角和光源高度角。,山体阴影计算是通过调用ISurfaceOp接口的HillShade方法实现的,该方法的原型为: public IGeoDataset HillShade (IGeoDatasetgeo Dataset, double azimuth,double altitude, bool i
27、nModelShadows, ref object zFactor); 该方法有五个参数,分别是: (1)IGeoDataset geoData输入的栅格数据。 (2)double azimuth光源方位角 (3)double altitude光源高度角 (4)bool inModelShadows 晕染类型,输出栅格是否考虑阴影的影响。 (5)ref object zFactor Z因子。,3. 栅格表面分析,返回山体阴影的实现思路如下: (1)获取输入栅格数据集IGeoDataset; (2)设置光源方位角(azimuth)和高度角(altitude)。 (3)调用ISurfaceOp接口
28、的HillShade方法,返回山体阴影数据集; (4)显示山体阴影数据。,3. 栅格表面分析,曲率(Curvature) 地面曲率是对地形表面上一点扭曲变化程度的定量化度量因子。曲率计算的输出结果为每个像元的表面曲率,该值通过将该像元与八个相邻像元拟合而得。曲率是表面的二阶导数,或者可称为坡度的坡度。可供选择的曲率有剖面曲率(表面沿坡度方向的曲率)和平面曲率(表面垂直于坡度方向的曲率)两种。,曲率计算是通过调用ISurfaceOp接口的Curvature方法实现的,该方法的原型为: public IGeoDataset Curvature (IGeoDatasetgeo Dataset,boo
29、l profile,bool plan); 该方法有三个参数,分别是: (1)IGeoDataset geoData输入的栅格数据集。 (2)bool profile 是否创建剖面曲率。 (3)bool plan 是否创建平面曲率。,3. 栅格表面分析,表面曲率计算的实现思路如下: (1)获取输入栅格数据集IGeoDataset; (2)设置是否创建剖面曲率和平面曲率; (3)调用ISurfaceOp接口的HillShade方法,返回曲率数据集; (4)显示表面曲率数据。,表面曲率数据,3. 栅格表面分析,可见性分析(Visibility) 可见性分析有两种分析类型,分别是视域分析和视点分析。
30、 视域用来确定输入栅格中能够从一个或多个观测位置看到的像元,输出的栅格的每个像元都会返回一个值,用于指定从这一位置可看到多少个观测点。 视点工具不仅会存储每个视点能够看到的栅格信息,而且会精确识别从每个栅格表面位置可以看到哪些视点。,可见性分析是通过调用ISurfaceOp接口的Visibility方法实现的,该方法的原型为: public IGeoDataset Visibility (IGeoDatasetgeo Dataset,IGeoDataset observers, esriGeoAnalysisVisibilityEnum visType); 该方法有三个参数,分别是: (1)I
31、GeoDataset geoData输入的栅格数据集。 (2)IGeoDataset observers 观察点位置数据集。 (3)esriGeoAnalysisVisibilityEnum visType 分析类型,包括视域和视点分析两种类型。,3. 栅格表面分析,可见性分析的esriGeoAnalysisVisibilityEnum枚举类型,用来确定可见性点的分析类型,其主要有视域(esriGeoAnalysisVisibilityFrequency)和视点(esriGeoAnalysisVisibilityObservers)分析两种。当选择视点分析类型时,所输入的观察点数不能超过16个
32、。 可见性分析的实现思路如下: (1)获取输入栅格数据集IGeoDataset; (2)返回观察点位置数据集; (3)选择可见性分析类型esriGeoAnalysisVisibilityEnum; (4)调用ISurfaceOp接口的Visibility方法,返回可见性结果数据; (5)显示可见性结果。,4. 栅格计算,栅格计算是栅格数据空间分析中进行数据处理和分析最为常用的方法,能够解决各种类型的问题,尤其重要的是,它是建立复杂的应用数学模型的基本模块。ArcGIS Engine支持以下几种栅格计算类型:数学计算、三角函数、逻辑运算和按位运算等。RasterMathOpsClass类实现了所
33、有的栅格计算,对应于以上的几种计算类型,该类实现了如下接口: (1)IMathOp(包含数学计算的所有方法) (2)ITrigOp(包含三角函数运算的所有方法) (3)ILogicalOp(包含逻辑运算的所有方法) (4)IBitwiseOp(包含按位运算的所有方法) (5)IRasterAnalysisEnvironment(设置空间分析环境),4. 栅格计算,栅格计算的实现思路如下: (1)获取输入栅格数据集,通常为一个或两个; (2)调用相应的计算类型接口中的计算方法; (3)显示计算结果。,5. 栅格统计,在空间分析过程中,经常要以栅格单元为单位进行栅格统计分析,经常用到的统计数据有栅
34、格所有单元的最大值、最小值、平均值、标准差等。 在ArcGIS Engine中,RasterStatistics类实现了栅格数据的统计,该类实现了IRasterStatistics接口,该接口有很多属性,主要有: (1)Maximum(获取输入栅格中的所有像元的最大值。) (2)Mean(获取输入栅格中的所有像元的平均值。) (3)Median(获取输入栅格中的所有像元的中值。) (4)Minimum(获取输入栅格中的所有像元的最小值。) (5)StandardDeviation(获取输入栅格中的所有像元的标准差。) (6)Mode(获取输入栅格中出现次数最多的值。),5. 栅格统计,实现栅格
35、统计需要用到IRasterBandCollection、IEnumRasterBand和IRasterBand接口,通过IRasterBandCollection接口得到栅格波段集合,通过IEnumRasterBand接口遍历每一个波段,然后通过IRasterBand接口得到其中一个波段,最后通过IRasterBand接口的Statistics属性得到RasterStatistics对象。 栅格统计的实现思路如下: (1)获取输入栅格数据集,得到该栅格数据集中的所有栅格波段; (2)通过IRasterBand的Statistics属性得到RasterStatistics对象; (3)显示统计结
36、果。,6. 密度分析,密度分析是指根据输入的要素数据集计算整个区域的数据聚集状况,从而产生一个连续的密度表面。通过密度计算,可将每个采样点的值散布到整个研究区域,并返回输出栅格中每个像元的密度值。例如,每个城镇都可以用一个点值来表示该镇的人口数量,但是并非所有人都聚居在该点上,若想了解人口随地区分布的情况,可以通过密度计算来得到一个显示地表人口分布状况的表面。密度分析有三种方法:核密度分析、线密度分析和点密度分析。 在ArcGIS Engine中,通过RasterDensityOpClass类实现密度分析,该类实现了两个主要的接口,分别是IRasterAnalysisEnvironment接口
37、和IDensityOp接口。IDensityOp接口中实现了密度分析的三种方法,分别是: (1)KernelDensity(核密度分析) (2)LineDensity(线密度分析) (3)PointDensity(点密度分析),6. 密度分析,核密度分析(KernelDensity) 核密度分析用于计算要素在其周围领域中的密度,既可计算点要素的密度也可计算线要素的密度,常用于测量建筑密度、返回犯罪情况报告、预测道路或管线对野生动物栖息地造成的影响等。,核密度分析是通过调用IDensityOp接口的KernelDensity方法实现的,该方法的原型为: public IGeoDataset Ke
38、rnelDensity (IGeoDataset sourceFeatures, ref object radiusDistance, ref object scaleFactor); 它有三个参数,分别是: (1)IGeoDataset geoData输入的点或折线要素。 (2)ref object radiusDistance 搜索半径。 (3)ref object scaleFactor 面积单位。,6. 密度分析,在进行核密度分析以及后面的线密度和点密度分析时,在输入的点或折线要素中,如果要素类中包含SPOT字段,则用SPOT字段的值来表示用来创建连续表面要素的计算次数,如果没有SPO
39、T字段,则每个要素在分析中只计算一次。如果想要指定某一字段作为要素的计算次数,则需要用到IFeatureClassDescriptor接口。通过IFeatureClassDescriptor接口的Create方法确定参与插值的要素数据集和计数字段。 核密度分析实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方法设置计数字段; (3)设置搜索半径(radiusDistance); (4)调用IDensityOp接口的KernelDensity方法,返回核密度
40、分析结果; (5)显示核密度分析结果。,6. 密度分析,线密度分析(LineDensity) 线密度分析用于计算每个输出栅格像元邻域内的线状要素的密度,密度的计算单位为“长度单位/面积单位”。理论上,使用以各个栅格像元中心为圆心以搜索半径绘制一个圆,每条线上落入该圆内的部分长度与计数字段相乘,对这些数值进行求和,然后将所得的总和除以圆面积就得到该栅格像元的密度。,线密度分析是通过调用IDensityOp接口的LineDensity方法实现的,该方法的原型为: public IGeoDataset LineDensity (IGeoDataset lineFeatures, ref object
41、 radiusDistance,ref object scaleFactor); 该方法有三个参数,分别是: (1)IGeoDataset geoData输入的折线要素。 (2)ref object radiusDistance 搜索半径。 (3)ref object scaleFactor 面积单位。,6. 密度分析,线密度分析实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方法设置计数字段; (3)设置搜索半径(radiusDistance); (4)
42、调用IDensityOp接口的LineDensity方法,返回线密度分析结果; (5)显示线密度分析结果。,6. 密度分析,点密度分析(PointDensity) 点密度分析用于计算每个输出栅格像元周围点要素的密度。从理论上讲,每个栅格像元中心的周围都定义了一个邻域,将落入邻域内的样本点的计数字段值相加,然后除以邻域面积,即得到点要素的密度。,点密度分析是通过调用IDensityOp接口的PointDensity方法实现的,该方法的原型为: public IGeoDataset PointDensity (IGeoDataset pointFeatures,IRasterNeighborhoo
43、d nbrhood,ref object scaleFactor); PointDensity方法有三个参数,分别是: (1)IGeoDataset geoData输入点要素。 (2)IRaster Neighborhood nbrhood 邻域分析。 (3)ref object scaleFactor 面积单位。,6. 密度分析,在进行点密度分析时还需要用到IRasterNeighborhood接口,以指定用于计算密度值的每个像元周围的区域形状。其包含四种类型,分别是环形、圆形、矩形和楔形。 点密度分析实现思路如下: (1)通过IRasterAnalysisEnvironment接口设置输出
44、栅格大小和处理范围等; (2)调用IFeatureClassDescriptor接口的Create方法设置计数字段; (3)调用IRasterNeighborhood接口设置邻域分析类型; (4)调用IDensityOp接口的PointDensity方法,返回点密度分析结果; (5)显示点密度分析结果。,7. 提取分析,提取分析用于返回感兴趣的栅格单元,如提取高程值大于某值的所有像元。在ArcGIS Engine中,通过RasterExtractionOp类实现栅格数据的提取分析,该类实现了两个主要的接口,分别是IRasterAnalysisEnvironment和IExtractionOp。
45、IExtractionOp中包含了以下提取分析方法,分别为: (1)Attribute(按属性提取) (2)Raster(掩膜提取) (3)Rectangle(用矩形提取) (4)Circle(按圆形区域提取) (5)Points(用点提取) (6)Polygon(多边形提取) (7)Sample(采样提取),7. 提取分析,按属性提取 利用按属性提取可以将满足指定属性查询条件的像元提取到新的输出栅格中,如提取高程大于1000m的所有像元,或提取土地利用类型中属性值为商业用地的所有像元。,按属性提取是通过调用IExtractionOp接口的Attribute方法实现的,该方法的原型为: pub
46、lic IGeoDataset Attribute (IRasterDescriptor Raster); 该方法只有一个参数: IRasterDescriptorRaster Raster 输入带有逻辑表达式的IRasterDescriptor类 型。,7. 提取分析,进行按属性提取时需要用到IRasterDescriptor接口,通过IRasterDescriptor接口的Create方法确定被提取的栅格数据集和一个逻辑查询表达式。 按属性查询的实现思路如下: (1)确定用于选择栅格像元子集的逻辑表达式; (2)调用IRasterDescriptor接口的Creat方法获取输入栅格数据;
47、(3)调用IExtractionOp接口的Attribute方法提取栅格; (4)显示按属性提取结果。,7. 提取分析,掩膜提取 掩膜提取就是提取掩膜所定义的区域的栅格单元。掩膜数据可以是栅格或要素数据集。当输入掩膜数据为栅格时,将在输出栅格中为掩膜数据中的NoData 像元指定 NoData 值。,掩膜提取是通过调用IExtractionOp接口的Raster方法实现的,该方法的原型为: public IGeoDataset Raster (IGeoDatasetgeo Dataset, IGeoDataset maskRaster); 该方法有两个参数,分别是: (1)IGeoDatase
48、t geoDataset 被提取的栅格数据集。 (2)IGeoDataset maskRaster 掩膜数据集,可以是矢量或栅格。,7. 提取分析,按属性查询的实现思路如下: (1)获取输入的栅格数据集IGeoDataset; (2)获取输入的掩膜数据集IGeoDataset; (3)调用IExtractionOp接口的Raster方法提取栅格; (4)显示按掩膜提取结果。,7. 提取分析,按形状提取 按形状提取是基于指定的形状提取像元,并且可以选择是提取形状的内部的像元还是外部的像元。按形状提取通过调用IExtractionOp接口的Circle(按圆形提取)方法、Polygon(按多边形提
49、取)方法和Rectangle(按矩形提取)方法实现,各个方法的参数有所不同。,Circle方法原型如下: public IGeoDataset Circle (IGeoDatasetgeo Dataset,ICircular ArcCircle, bool selectInside); Polygon方法原型如下: public IGeoDataset Polygon (IGeoDatasetgeo Dataset,IPolygon Polygon, bool selectInside); Rectangle方法原型如下: public IGeoDataset Rectangle (IGeoD
50、atasetgeo Dataset,IEnvelop erectangleEnvelope,bool selectInside); 下面以调用Rectangle方法为例,设置提取矩形为当前地图的视图范围。 按形状提取的实现思路如下: (1)获取输入的栅格数据集IGeoDataset; (2)得到要提取的形状要素,可以是圆形、矩形和多边形; (3)调用IExtractionOp接口的相应方法提取栅格; (4)显示按形状提取结果。,7. 提取分析,下面以调用Rectangle方法为例,设置提取矩形为当前地图的视图范围。 按形状提取的实现思路如下: (1)获取输入的栅格数据集IGeoDataset; (2)得到要提取的形状要素,可以是圆形、矩形和多边形; (3)调用IExtractionOp接口的相应方法提取栅格; (4)显示按形状提取结果。,