ArcGIS二次开发基础教程(09):叠加分析
ArcGIS二次开发基础教程(09):叠加分析
缓冲区分析的概念及原理请查看帮助文档 http://desktop.arcgis.com/zh-cn/arcmap/latest/tools/analysis-toolbox/how-buffer-analysis-works.htm
缓冲区分析
//实现对图层中所有点要素进行缓冲分析
IGraphicsContainer graphicsContainer = axMapcontrol1.Map as IGraphicsContainer;
IFeatureLayer featureLayer = GetLayerByName("图层名称");
//IQueryFilter filter = new QueryFilterClass();
//ISpactialFilter filter = new SpatialFilterClass();
//此处不设置查询条件,也可以设置如上面两行的属性或空间查询条件,只对符合特定条件的要素进行缓冲区分析
IFeatureCursor cursor = featureLayer.FeatureClass.Search(null,true);
IFeature feature = cursor.NextFeature();
//定义一个ITopologicalOperator变量 有关ITopologicalOperator的成员说明请务必查看帮助文档
ITopologicalOperator topo;
while(feature != null)
{topo = feature.ShapeCopy as ITopologicalOperator;//参数为缓冲区半径 半径大小需特别注意 根据实际地图的大小来确定IGeometry buffer = topo.Buffer(0.001);IElement ele = new PolygonClass();ele.Shape = buffer;graphicsContainer.AddElement(ele,0);feature = cursor.NextFeature();
}
axMapControl1.Refresh();
裁剪
有关概念查看帮助文档 http://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/analysis-toolbox/clip.htm
//实现 从屏幕划取矩形(也可以是圆或者多边形)作为裁剪区域对指定图层进行裁剪并把裁剪结果作为新的图层添加到地图中
private void clip(object sender, IMapControlEvents2_OnMouseDownEvent e)
{//以下代码实现在文件打开路径处创建一个新的FeatureClass//首先在文件路径处打开要素类工作空间IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();//path为路径全局变量,打开文件时赋值IFeatureWorkspace featureWorkspace = workspaceFactory.OpenFromFile(System.IO.Path.GetDirectory(path));//裁剪图层IFeatureLayer featureLayer = GetLayerByName("图层名称");//copy目标图层的要素字段用来创建新的要素类IFields fields = featureLayer.FeatureClass.Fields;IObjectCopy copy = new ObjectCopyClass();IFields fieldsCopy = copy.Copy(fields) as IFields;//创建一个新的要素类 参数一为要素类名称,二为字段,其它请务必参考帮助文档IFeatureClass newClass = featureWorkspace.CreateFeatureClass("Clip", fieldsCopy, null, null, esriFeatureType.esriFTSimple, "Shape", "");//从地图获取裁剪区域IEnvelop env = axMapControl1.TrackRectangle;//用获得区域与图层进行空间相交查询获得目标要素ISpatialFilter spatialFilter = new SpatialFilterClass();spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;spatialFilter.Geometry = env as IEnvelop;IFeatureCursor cursor = featureLayer.FeatureClass.Search(spatialFilter,true);IFeature feature = cursor.NextFeature();ITopologicalOperator topo;//设置允许插入新要素IFeatureCursor insterCursor = newClass.Inster(true);//创建 缓冲要素 要素暂存在内存中IFeatureBuffer buffer = newClass.CreateFeatureBuffer();//遍历查询到的要素 进行裁剪获取空间信息while(faeture != null){topo = feature.ShapeCopy as ITopologicalOperator;IGeometry geometry = new PolygonClass();//裁剪只能获取要素信息,查询获得属性信息 两者结合才能得到完整的要素类topo.QueryClipped(env,geometry);//结合查询属性和空间信息for(int i=0;i<feature.Fields.FieldCount;i++){if(feature.get_Fields(i).Name.Equals("Shape")){buffer.Shape = geometry;continue;}buffer.set_Value(i,feature.get_Value(i));}//插入要素insterCursor.InsterFeature(buffer);feature = cursor.NextFeature();}//创建新图层 设置要素类IFeatureLayer layer = new FeatureLayerClass();layer.FeatureClass = newClass;layer.Name = newClass.AliceName;//添加到地图控件中axMapControl1.AddLayer(layer);axMapControl1.Refresh();axTOCControl1.Update();
}
栅格叠加
查看帮助文档 http://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/commonly-used-tools/overlay-analysis.htm
//获取栅格数据集
private IGeoDataset GetDatasetByPath(string path)
{IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();IRasterWorkspace rasterWorkspace = workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(path)) as IRasterWorkspace;IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(path));return rasterDataset as IGeoDataset;
}//从路径中获取栅格数据转换为栅格波段对象
IRasterBand rasterBand_1 = GetDatasetByPath(path1);
IRasterBand rasterBand_2 = GetDatasetByName(path2);
//创建一个IRasterBandCollection接口
IRasterBandCollection rasterBandCollection = new RasterClass();
//添加数据
rasterBandCollection.AppendBand(rasterBand_1);
rasterBandCollection.AppendBand(rasterBand_2);
//转换为IGeodataset
IGeoDataset inputDataset = rasterBandCollection as IGeoDataset;
//创建栅格波段集合对象
ILocalOp localOp = new RasterLocalOpClass();
//调用Conbine方法
IGeoDataset output = localOp.Combine(inputDataset);
//用叠加生成的地理数据集创建栅格图层
IRasterLayer layer = new RasterLayerClass();
layer.CreateFromRaster(output as IRaster);
layer.Name = "Combine";
axMapControl1.AddLayer(layer as ILayer);
axMapControl1.Refresh();
axTOCControl1.Update();
历届GIS应用技能大赛开发题答案点这里,尚在不定期更新中
ArcGIS二次开发基础教程(09):叠加分析相关推荐
- ArcGIS二次开发基础教程(11):网络分析之最短路径分析
ArcGIS二次开发基础教程(11):网络分析之最短路径分析 最短路径分析 这里直接调用了在mdb中建立好的网络数据集 //全局变量 private INetworkDataset my_networ ...
- ArcGIS二次开发基础教程(10):三维分析
ArcGIS二次开发基础教程(10):三维分析 坡度分析 请务必学会使用帮助文档!!! //DEM数据的坡度分析 将分析结果添加到地图上 //首先获取DEM数据,方法有很多例如从个人地理数据库获取,也 ...
- ArcGIS二次开发基础教程(06):有关图层的基本操作
ArcGIS二次开发基础教程(06):有关图层的基本操作 0. PageLayout和MapControl 的同步 void CopyToPage(){//对象拷贝,把mapcontrol的地图拷贝重 ...
- ArcGIS二次开发基础教程(13):网络分析之最近设施分析
ArcGIS二次开发基础教程(13):网络分析之最近设施分析 最近设施分析 /// <summary>/// Geodatabase function: open work space// ...
- ArcGIS二次开发基础教程(00):基础界面设计
ArcGIS二次开发基础教程(00) : 基础界面设计 (开发环境:VS2010+ArcEngine10.2+C# :鉴于学习ArcGIS二次开发的同学都有一定的WinForm开发和ArcGIS软件使 ...
- ArcGIS二次开发基础教程(03):保存文档和导出地图
ArcGIS二次开发基础教程(03):保存文档和导出地图 保存文档 保存: //这里的path为全局变量 在打开文件获添加数据时赋值原路径 //判断打开文件是否为mxd文件 是则保存 不是则另存为 i ...
- ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询
ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询 属性 字段的添加.删除和查找 IFeatureLayer GetLayerByName(string name) {ILaye ...
- ArcGIS二次开发基础教程(08):在MapControl上画图(添加元素)
ArcGIS二次开发基础教程(08):在MapControl上画图(添加元素) 添加临时元素 0. 点元素 //临时画图的元素将不会保存在地图中 //全局变量 IPoint pt; IElement ...
- ArcGIS二次开发基础教程:开发环境配置教程(ArcEngine10.4+VS2019)
开发环境配置教程 由于ArcGIS.ArcEngine以及承载开发环境的Visual Studio的版本众多,其开发环境的配置也有不小的难度,故写此文章写给新入门ArcGIS二次开发的同学,帮助他们摆 ...
最新文章
- C#3.0入门系列(五)-之Where操作
- Java实现上传文件到指定服务器指定目录
- 零拷贝概念 -- linux内核
- java locale.us_JAVA实现国际化
- 大锅菜机器人_炒菜机或者炒菜机器人有好用的吗 - 玩主论坛
- (119)System Verilog 父类与子类对象复制(自定义函数)详解
- linux点阵数字图案,LED8X8点阵显示数字0-9数字
- linux root身份执行命令,用root的身份去执行一个命令
- 谷歌云盘和百度云盘文件转存
- 轻量却超强——推荐几款好用的截图工具(1) FScapture
- 交换机三种端口模式Access、Hybrid和Trunk
- 十年优秀网络玄幻小说大点评(推荐)
- SDN架构技术报告:北向与南向协议
- 【项目小结】爬虫学习进阶:获取百度指数历史数据
- 美丽离岛兰屿印象图集
- 13651.Python数字读作中文大写
- Android实现高斯模糊背景对话框,Android进行高斯模糊的简单实现
- 关于word插入题注“题注或页码中不含章节号”错误提示
- C语言学习(三)内存初识、数据在内存中的保存形式、程序载入内存
- UML(系统分析与设计核心总结)+期末考试例题分析