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#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM