断断续续地把《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#