}
//结束编辑
w.StopEditOperation(); //结束事务操作 w.StopEditing(true); }
二、添加线
方法跟添加点一样,不同的只是地物类型不一样而已,
AE中各类库的介绍
1、 问题一:什么是UI组件? 2、 类库介绍
空间拓扑运算
1、高级几何对象:点(point)、多点(multipoint)、线(polyline)、面(polygon)、multipatch等。(multipatch:多片,三维地形图中的地图符号包括点状符号、线状符号、面状符号、体状符号以及多片(MultiPatch)符号等)
2、拓扑:空间拓扑描述的事自然界地理对象的空间位置关系,即相邻、重合、连通等。是在同一个要素集下的要素类之间的关系的集合,所以要参与一个拓扑的所有要素类,必须在同一个要素集内(也就是具有同一个空间参考),这样进行的拓扑检查才是精确的。
3、一个要素集可以有多个拓扑,但每个要素类最多只能参与一个拓扑,一个拓扑中可以定义多个规则,是地理对象空间属性的一部分,在目前ESRI提供的数据存储方式中,Coverage和GeoDatabase能够建立拓扑,而Shape格式的数据不能建立拓扑。
4、 esriTRTAny———— 任何拓扑规则,查询拓扑的时候用(ESRI提供的拓扑关系) 5、AE中提供了ITopologicalOperator接口用于拓扑运算,ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算,以产生新的集合对象。ITopologicalOperator接口在GIS开发中的使用非常广泛,通常GIS系统中的缓冲区分析、裁剪几何图形、几何图形差分操作、几何图形合并操作等都需要此接口。
Boundary 方法用于几何图形对象的边界。Polygon的几何对象的Boundary是组成它的Polyline几何对象,Polyline几何对象的Boundary是组成它的顶点Point几何对象,而Point的几何对象的Boundary是空对象。
Buffer 用于集合对象缓冲区分析拓扑操作,该方法用于给一个高级几何对象产生一个缓冲区,无论是Polygon、Polyline、还是Point,他们的缓冲区都是具有面积的几何对象。 Clip 用于对几何对象进行裁剪空间拓扑操作。Clip方法可用一个Envelope对象对一个几何对象进行裁剪,结果是几何对象被Envelope对象所包围的部分。
ConstructUion用于将多个枚举对象与单个几何对象合并为单个几何对象。
ConvexHull 用于构建几何对象的凸多边形。ConvexHull方法用于产生一个几何图形的最小的边框凸多边形(没有凹面包含几何图形的最小多边形)
Cut 用于切割几何对象,不支持GeometryBags几何对象,它可以指定一条切割曲线和一个几何图形,经过切割运算后把几何图形分为左右两部分,左右两部分是相对曲线的方向而言的。点与多点不可被分割。Polyline和Polygon只有与切割曲线相交时才能执行Cut方法。
Difference 用于从一个几何图形中减去其与另一个图形相交的部分,产生两个几何对象的差集。
Intersection方法用于两个同纬度几何对象的交集部分。 Simplify用于使几何对象拓扑一致。
SymmetricDifference对称差分可将两个几何图形的并集部分减去两个几何图形交集的部分。
开发实例
一、 鹰眼功能的实现:
分析:鹰眼图的操作主要由以下几个动作,当在一个控件中移动一幅图的时候另一控件中的图也发生变化,当在主控件中重新加载一幅图的时候,另外一个控件的图也发生相应的变化,同时我们在鸟瞰的控件中加入一红色边框,注意这个其实是一个面,只是填充的颜色是透明的而已。通过分析我们知道,我们要添加两个MapControl控件,名字分别是axMapControl1和axMapControl2,其中axMapControl1为主图,而axMapControl2为鸟瞰图。
方法:步骤一:对于名称为axMapControl1的MapControl控
件,只需要在axMapControl1的OnExtentUpdated和OnMapReplaced中分别添加以下代码:
private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e) {
// 得到新范围
IEnvelope pEnvelope = (IEnvelope)e.newEnvelope;
IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer; IActiveView pActiveView = pGraphicsContainer as IActiveView; //在绘制前,清除axMapControl2中的任何图形元素 pGraphicsContainer.DeleteAllElements();
IRectangleElement pRectangleEle = new RectangleElementClass(); IElement pElement = pRectangleEle as IElement; pElement.Geometry = pEnvelope;
//设置鹰眼图中的红线框
IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0;
pColor.Transparency = 255;
//产生一个线符号对象
ILineSymbol pOutline = new SimpleLineSymbolClass();
pOutline.Width = 3; 的属性
IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pColor; pFillSymbol.Outline = pOutline;
IFillShapeElement pFillShapeEle = pElement as IFillShapeElement; pFillShapeEle.Symbol = pFillSymbol;
pGraphicsContainer.AddElement((IElement)pFillShapeEle, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); }
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) {
if (axMapControl1.LayerCount > 0)