在AE中我想用IRasterAnalysisEnvironment接口的SetExtent方法来设置范围,虽然没报错,但是还是原先的样子。
private void toolStripMenuItem9_Click(object sender, EventArgs e)
{
IInterpolationOp pInterpolationOp;
pInterpolationOp = new RasterInterpolationOpClass();
IFeatureClass pFeatureClass;//进行插值的图层
pFeatureClass = pTocFeatureLayer.FeatureClass;
//根据范围矢量图层的名称获取其序号
ind = OperateMap.GetLayerIndexByName(mainMapControl, "乡镇复制_pro");
IFeatureLayer featureLayer = this.mainMapControl.Map.get_Layer(ind) as IFeatureLayer;//点图层在axMapControl控件的第一个,索引为0
//设置搜索半径,本例为12
IRasterRadius pRadius;
pRadius = new RasterRadiusClass();
object maxDistance = Type.Missing;
pRadius.SetVariable(12, ref maxDistance);
//设置进行插值的属性字段
IFeatureClassDescriptor pFCDescriptor;
pFCDescriptor = new FeatureClassDescriptorClass();
string FieldName = " ";//注意,引号内为Idw插值中的Z值,即属性表中要进行对其进行插值的字段名
pFCDescriptor.Create(pFeatureClass, null, FieldName);
//设置输出像元大小
IRasterAnalysisEnvironment pEnv;
pEnv = new RasterAnalysis();
object dCellSize = 144.337439931631;//设置像元值(参考ARCMAP)
pEnv = pInterpolationOp as IRasterAnalysisEnvironment;
pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref dCellSize);
object objectbarrier = Type.Missing;
//设置空间处理范围
object extent;
IGeoDataset geo = featureLayer.FeatureClass as IGeoDataset;//featureLayer为“乡镇复制”
extent = geo.Extent;
pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extent, ref maxDistance);
//执行IDW,并输出栅格
IGeoDataset rasDataset;
rasDataset = pInterpolationOp.IDW((IGeoDataset)pFCDescriptor, 2, pRadius, ref objectbarrier);
IRaster pOutRaster;
pOutRaster = rasDataset as IRaster;
pOutRasLayer = new RasterLayerClass();
pOutRasLayer.CreateFromRaster(pOutRaster);
this.mainMapControl.AddLayer(pOutRasLayer, 0);// 输出结果至axMapControl1,并放置在第一层
mainMapControl.ActiveView.Refresh();//刷新视图
}
在ArcGIS中,修改空间范围的两个方法:
(1)修改图层的数据框属性
点击右下角的环境——处理范围——选择“与 某矢量图层 相同"
点击确定即可。
(2)在插值时的界面上设置环境中的处理范围。
右击 内容列表中的 最上面的图层——选择属性
范围设置为自动——裁剪选项中选择“裁剪至形状"——点击”指定形状“
选择“要素的轮廓"——选择范围矢量图层