斷斷續續地把《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#