ArcEngine 9.3 学习笔记(一):几何对象与空间参考(Point、MultiPoint、Path、Ring、PolylinePolygon的创建)
断断续续地把《ArcObjects GIS应用开发-基于C#》看完了,几百页,还是晚上看的,也就有个概念,这几天找了本 《TM_A_090420_ArcGIS Engines9.3 基础开发教程》,感觉内容偏向实战,在看的过程中为了集中注意力,一边看,一边敲,等看完了,发现抄了几千行的内容。于是乎想放上来留个纪念;这本书应该是某个ESIR的员工很早前写的,也能在网上搜到不少转载的文章。这里就再引用下吧。
第一章 创建第一个ArcGIS Engine桌面应用程序
::: 这章主要是一个列子,用来让大家熟悉下AE的开发方式,演示了几个工具条的使用,使用的也是AE提供的封装好的控件,这里就略过了。主要应用的控件有:ToolBarControl、TocControl、LicenseControl、MapControl。
第二章 几何对象与空间参考
目标:
1. 熟悉ArcGIS Engine Geometry模型,通过程序构建常用几何对象。
2. 熟悉空间参考。
3. 通过野外测量点构建一个polygon几何要素功能开发。
2.3 Geomerty 主要几何对象模型图
我觉得这个图,把AE中所有几何对象的关系够反映出来,就接上来了。
Geometry是ArcGIS Engine中使用最为广泛的对象之一,用户在创建、删除、编辑和进行地理分析的时候,就是处理一个包含几何形体的矢量对象;除了显示要素以外,控件对象选择,要素符号化,标注要素,编辑要素都需要Geometry参与。
2.4 几何对象
2.4.1 Point和MultiPoint几何对象
2.4.1.1 Point几何对象
Point:是一个0维的几何图形,具有X,Y坐标值,以及一些可选的属性:如高程值(Z值),度量值(M值)和ID号,点对象用于描述精确定位的对象,例如一个电话亭在一个城市的精确位置以下代码演示如何创建一个Point对象。
IPoint pPoint = new PointClass();
pPoint.X=100;
pPoint.Y=100;
2.4.1.2 MultiPoint 几何对象
MultiPoint:点集对象是一系列无序的点的群集,这些点具有相同的属性信息。例如可以用一个点集来表示整个城市天然气调压站。
以下代码用于创建一个点集(就是创建一个点的集合,然后转换为点集对象):
1 /// <summary> 2 /// 创建点集 3 /// </summary> 4 /// <returns></returns> 5 public Multipoint CreateMultipoint() 6 { 7 // 定义第一个点 8 IPoint pPoint1 = new PointClass(); 9 pPoint1.X = 100; 10 pPoint1.Y = 100; 11 12 // 定义第二个点 13 IPoint pPoint2 = new PointClass(); 14 pPoint2.X = 200; 15 pPoint2.Y = 200; 16 // .....继续构建其他点 17 18 IPointCollection pMultIPoint = new MultipointClass(); 19 object o = Type.Missing; 20 // 添加第一个点,不需要设置点的顺序,参数设置为Type.Missing 21 pMultIPoint.AddPoint(pPoint1, ref o, ref o); 22 // 添加第二个点,不需要设置点的顺序,参数设置为Type.Missing 23 pMultIPoint.AddPoint(pPoint2, ref o, ref o); 24 25 return (Multipoint)pMultIPoint; 26 }
2.4.2 Segment几何对象
Segment :有起点、终点和参数定义三个方面定义。它的子类包括:Line(二维线段) ,CircularArc(圆弧),EllipticArc(椭圆弧),BezierCurve(贝塞尔曲线)。
2.4.3 Path和Ring几何对象
2.4.3.1 Path几何对象
Path 是连续的Segment集合,除了路径的第一个segment和最后一个Segment外,其余的segment的起始点都是前一个segment的终止点,Path对象中的Segment不能出现分离,Path可以是任意个数,任意类型的Segment子类对象的组合。用于构建path的对象可以是任何属于segment的对象,比如Line,Circularc,Ellipticarc和BezierCurve。
2.4.3.2 Ring几何对象
Ring 是一个封闭的Path ,即起始点和终止点有相同的坐标值;它有内部和外部的属性;一个或多个Ring对象组成一个Polygon对象。
2.4.4 Polyline和Polygon几何对象
2.4.4.1 Polyline几何对象
Ployline:是由一个或多个相连或者不相连的path对象的有序几何,1.它可以是单个Path对象组成,2.也可以是多个相连的Path对象组成,3.或者是多个分离的Path组成.
Polyline通常用来代表线状地物如道路、河流、管线等等。
一个Polyline对象必须满足以下准则:
1、组成Polyline对象的所有Path对象必须是有效的;
2、组成Polyline对象的所有Path对象不能重合,相交或者自相交;
3、组成Polyline对象的多个Path对象可以连接于某一点,也可以分离;
4、Path对象的长度不能为0.
IPolyline是Polyline类的主要接口,IPolyline的reshape方法可以使用一个Path对象为一个Polyline对象整形;
IPolyline的SimplifyNetWork方法用于简化网络;
Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建.
IPolyline 是Polyline类的主要接口,IPolyline的Reshape方法,可以使用一个Path对象为一个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该接口需要注意以下情况:
1.每一个Path对象必须是有效的,或使用IPath::Simplify方法后有效。
2.由于Polyline是Path对象的有序集合,所有添加Path对象时必须注意顺序和方向。
3.为了保证Polyline是有效的,可以创建完Polyline对象后使用ITopologicalOperator接口的Simplify方法。
以下代码片段为使用IGeometryCollection接口创建一个Polyline对象:
1 /// <summary> 2 /// 创建IPolyline对象: 3 /// a. 创建Line对象(也可是其他Segment对象), 4 /// b. QI到Segment对象 5 /// c. 创建Path对象,通过Path的addSegment,将最初的Line添加进Path中 6 /// d. 创建GeometryCollection对象,通过AddGeometry,将path添加进GeometryCollection中 7 /// e. 将GeometryCollection QI到 IPolyline 8 /// </summary> 9 /// <returns></returns> 10 public IPolyline CreatePolyline() 11 { 12 // 定义第一个点 13 IPoint pPoint1 = new PointClass(); 14 pPoint1.X = 100; 15 pPoint1.Y = 100; 16 // 定义第二个点 17 IPoint pPoint2 = new PointClass(); 18 pPoint2.X = 200; 19 pPoint2.Y = 200; 20 // 创建一个Line对象 21 ILine pLine = new LineClass(); 22 // 设置LIne对象的起始终止点 23 pLine.PutCoords(pPoint1, pPoint2); 24 // QI到ISegment 25 ISegment pSegment = pLine as ISegment; 26 // 创建一个Path对象 27 ISegmentCollection pPath = new PathClass(); 28 object o = Type.Missing; 29 // 通过Isegmentcoletcion接口为Path对象添加Segment对象 30 pPath.AddSegment(pSegment, ref o, ref o); 31 32 // 创建一个Polyline对象 33 IGeometryCollection pPolyline = new PolylineClass(); 34 pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o); 35 36 IPolyline pPLine = pPolyline as IPolyline; 37 return pPLine; 38 }
2.4.4.2 Polygon几何对象
Polygon对象是由一个或多个ring对象的有序集合,它可以是由单个Ring对象构成,也可以使用多个Ring组成。其中Ring可以分为OuterRing(外环)和InnerRIng(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。
Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。
1 /// <summary> 2 /// 构建一个Polygon对象: 3 /// a. 创建一个或多个Ring对象 4 /// b. 将Ring对象添加进IGeometryCollection集合中 5 /// c. 将IGeometryCollection集合QI 到 IPolygon对象 6 /// </summary> 7 /// <returns></returns> 8 public IPolygon CreatePolygon() 9 { 10 //创建一个Ring对象,通过ISegmentCollection接口向其中添加Segment对象,进而QI回Ring 11 IRing pRing = CreateRing(); 12 13 // 使用Ring对象构建Polygon对象 14 IGeometryCollection pGeometryColl = new PolygonClass(); 15 object o = Type.Missing; 16 pGeometryColl.AddGeometry(pRing, ref o, ref o); 17 18 IPolygon pPolygon = pGeometryColl as IPolygon; 19 return pPolygon; 20 }
先在这里打个断点吧,排版真麻烦,之前文本都写成注释了...
ArcObjects GIS应用开发-基于C#