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#

posted @ 2013-06-02 22:00  铁手三郎  阅读(5949)  评论(0编辑  收藏  举报