Arcgis Engine二次开发实验报告 下载本文

spatialFilter.WhereClause = \;//人口等级等于5的城市 spatialFilter.SpatialRel =

(ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum)spatialRel; //定义要素选择对象,以要素搜索图层进行实例化

IFeatureSelectionfeatSelect = (IFeatureSelection)iSrcLayer; //以空间过滤器对要素进行选择,并建立新选择集 featSelect.SelectFeatures(spatialFilter,

esriSelectionResultEnum.esriSelectionResultNew, false); returntrue; }

2.添加菜单项点击事件

privatevoidmiSpatialFilterToolStripMenuItem(object sender, EventArgs e) {

MapAnalysismapAnalysis=newMapAnalysis(); mapAnalysis.QueryIntersect(\

Cities\,\,axMapControl1.Map,esriSpatialRelationEnum.esriSpatialRelationIntersection); IActiveViewactiveView;

activeView=axMapControl1.ActiveView;

activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,0,axMapControl1.Extent); }

运行结果

实现缓冲区分析程序

实验思路:

本实验是用的缓冲区分析功能,是根据数据库的点、线、面实体,建立实体周围一定范围内的缓冲区域。实验中是查询世界城市中距离北京经纬度1度范围之内的所有城市。实验主要包含以下几个部分:

1. 添加主菜单菜单项:在主窗体的“GIS分析”的下拉菜单中新建一个“缓

冲区分析”菜单项

2. 添加类成员函数:向地图分析类中添加缓冲区分析函数,创立缓冲区,

利用过滤条件进行查询。

3. 添加点击事件响应函数:实现要素的缓冲区分析,交叉选择城市并在地

图中明显标识

实现流程如下:

添加主窗体菜单项添加类成员函数添加事件响应函数符合条件的要素在图中高亮显示运行,点击缓冲区分析

关键代码:

1.增加缓冲区分析函数

publicbool Buffer(stringlayerName, stringsWhere, intiSize, IMapiMap) {

//根据过滤条件获取城市名称为北京的城市要素的几何 IFeatureClassfeatClass; IFeature feature; IGeometryiGeom;

DataOperatordataOperator = newDataOperator(iMap); IFeatureLayerfeatLayer =

(IFeatureLayer)dataOperator.GetLayerByName(layerName);

featClass = featLayer.FeatureClass;

IQueryFilterqueryFilter = newQueryFilter();

queryFilter.WhereClause = sWhere;//设置过滤条件 IFeatureCursorfeatCursor;

featCursor = (IFeatureCursor)featClass.Search(queryFilter, false); int count = featClass.FeatureCount(queryFilter);

feature = featCursor.NextFeature(); iGeom = feature.Shape;

//设置空间的缓冲区作为空间查询的几何范围

ITopologicalOperatoripTO = (ITopologicalOperator)iGeom; IGeometryiGeomBuffer = ipTO.Buffer(iSize); //根据缓冲区几何对城市图层进行空间过滤

ISpatialFilterspatialFilter = newSpatialFilter(); spatialFilter.Geometry = iGeomBuffer; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIndexIntersects; //定义要素选择对象,以要素搜索图层进行实例化

IFeatureSelectionfeatSelect = (IFeatureSelection)featLayer; //以空间过滤器对要素进行选择,并建立新选择集 featSelect.SelectFeatures(spatialFilter,

esriSelectionResultEnum.esriSelectionResultNew, false); returntrue; }

4. 添加菜单项点击事件

privatevoidmiBuffer_Click(object sender, EventArgs e) {

MapAnalysismapAnalysis = newMapAnalysis();

mapAnalysis.Buffer(\, \, 1, axMapControl1.Map); IActiveViewactiveView;

activeView = axMapControl1.ActiveView;

activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, 0, axMapControl1.Extent); }

5. 运行结果

实现要素统计程序 实验思路:

本实验是以世界各大洲的面积统计为例,通过调用统计相关组件获取最小面积、最大面积和平均面积。数据统计组件通过DataStatistics统计并返回结果,再以游标形式传入,实验主要包括以下几个部分:

1. 添加菜单项:在程序主窗体的“GIS分析”菜单项的下拉菜单中,添加一个菜单项“要素统计”

2. 添加类成员函数:向地图分析类中添加要素统计函数,对图层进行要素统计 3. 添加事件响应函数:为菜单项“要素统计”生成点击事件响应函数,实现要素面积统计分析,将结果以对话框的形式输出。 实现流程如下: