IFeatureClassfeatureClass = featureLayer.FeatureClass; //通过接口访问访问要素类新创建的要素,并判断是否成功 IFeature feature = featureClass.CreateFeature(); if (feature == null) { returnfalse; }
//对新创建的要素进行编辑,设置坐标、属性值,并保存 //判断是否成功
feature.Shape = point;
int index = feature.Fields.FindField(\); feature.set_Value(index, sFeatureName); feature.Store(); if (feature == null) { returnfalse; }
//将地图对象转化为活动视图,并判断是否成功 IActiveViewactiveView = m_mapasIActiveView; if (activeView == null) { returnfalse; }
//活动视图进行刷新 activeView.Refresh(); returntrue; }
2. 添加事件响应函数
//生成菜单项点击事件,按下鼠标添加要素
privatevoidmiAddFeature_Click(object sender, EventArgs e) {
if (miAddFeature.Checked == false) {
miAddFeature.Checked = true; } else
{
miAddFeature.Checked = false; } }
//鼠标按下事件响应函数
privatevoid axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
if (miAddFeature.Checked == true) {
//新建点类对象,保存点位置信息 IPoint point = newPointClass(); point.PutCoords(e.mapX, e.mapY);
//在新建图层中添加要素,要素的名称统一设置为“观测站\
DataOperatordataOperator = newDataOperator(axMapControl1.Map);
dataOperator.AddFeatureToLayer(\, \观测站\, point); return;
} }
3.运行成果
4 实验五:GIS分析
5.1 实验目的
? 了解GIS空间分析的内容 ? 掌握空间关系查询方法 ? 掌握空间拓扑分析方法 ? 掌握空间数据统计方法
5.2 实验内容
? 实现空间关系查询程序 ? 实现缓冲区分析程序 ? 实现要素统计程序
5.3 实验步骤与结果
实现空间关系查询程序实验思路:
ArcGis Engine组件库提供了数据查询的相关组件,如QueryDef,查询结果包含在cursor游标内,进行要素选择核心的是查询过滤器。实验是对给定图层按熟悉进行查询,搜索亚洲境内人口等级等于5的所有城市列表。实验主要包含几下几个部分:
1. 添加控件和类库引用:在主窗体上添加“空间分析”菜单项和下拉菜单
项“空间查询”
2. 新增地图分析类并导入部分类库:该类用于管理当前项目中涉及的地图
分析相关功能
3. 添加类成员函数:在“地图分析”类中添加成员函数“空间查询”实现
对给定图层的空间交叉查询
4. 添加事件响应函数:为菜单项“空间查询”生成“点击”事件响应函数,
实现要素的空间交叉选择,并在地图上明显标识。
程序实现流程如下:
添加主窗体控件添加地图分析类和类库添加类成员函数满足条件的要素在图上高亮显示运行,点击“空间查询”添加事件响应函数
关键代码:
1.在类中增加空间查询函数,对图层进行空间交叉查询
publicboolQueryIntersect(stringsrcLayerName, stringtgtLayerName, IMapimap, esriSpatialRelationEnumspatialRel) {
DataOperatordataOperator = newDataOperator(imap); //定义并根据图层名称获取图层对象 IFeatureLayeriSrcLayer =
(IFeatureLayer)dataOperator.GetLayerByName(srcLayerName); IFeatureLayeriTgtLayer =
(IFeatureLayer)dataOperator.GetLayerByName(tgtLayerName); //通过查询过滤获取continents层中亚洲的几何 IGeometrygeom; IFeature feature;
IFeatureCursorfeatCursor; IFeatureClasssrcFeatClass;
IQueryFilterqueryFilter = newQueryFilter();
queryFilter.WhereClause = \; //设置查询条件 featCursor = iTgtLayer.FeatureClass.Search(queryFilter, false); feature = featCursor.NextFeature();
geom = feature.Shape; //获取亚洲图形几何
//根据所选择的几何对城市图层进行属性与空间过滤 srcFeatClass = iSrcLayer.FeatureClass;
ISpatialFilterspatialFilter = newSpatialFilter(); spatialFilter.Geometry = geom;