//點操做~~~~~~~~~~~~~~~~~~~~~~~~~ //經過座標生成點 IPoint point = new PointClass(); point.PutCoords(100, 200); //獲取點座標 double x = point.X; double y = point.Y; //線操做~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //經過點集生成線 IPolyline polyline = new PolylineClass(); //思路是經過點集接口IPointCollection添加線的點,建立線和麪一樣可用此方法 IPointCollection pointColl = polyline as IPointCollection; point = new PointClass(); point.PutCoords(100, 200); pointColl.AddPoint(point); point = new PointClass(); point.PutCoords(300, 100); pointColl.AddPoint(point); //經過點集生成線 完成~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //獲取線的起點和終點 IPoint pointStart = polyline.FromPoint; IPoint pointEnd = polyline.ToPoint; //獲取線的長度 double length = polyline.Length; //獲取線的矩形範圍(envelop),面的獲取方式也同樣 //線和麪都有envelope,不過點的envelop沒有意義 IEnvelope envelope = polyline.Envelope; //獲取線是不是閉合的線 bool isClosed = polyline.IsClosed; //把線的方向反轉,就是起點和終點,點的順序反轉 polyline.ReverseOrientation(); //獲取線的全部點,對於面一樣可用此方法 for (int i = 0; i < pointColl.PointCount; i++) { IPoint point1 = pointColl.Point[i]; } //面操做~~~~~~~~~~~~~~~~~~~~~~~~~~~ IPolygon polygon = new PolygonClass(); //經過點集生成線:與線同樣 //注意:生成面時點集要求第一個點作座標和最後一個點的座標同樣,也可理解爲同一個點添加了兩次,不然會出錯 //獲取面的周長 length = polygon.Length; IArea area = polygon as IArea; //獲取面的面積 double area1 = area.Area; //獲取面的全部點,跟線獲取的方法同樣 //幾何通用操做~~~~~~~~~~~~~~~~~~~~~~~~~~~ //點線面均可以as到IGeometry,全部幾何對象的類型均可以,所以全部幾何類型接口都繼承了IGeometry IGeometry geometry = polygon as IGeometry; //獲取幾何類型,能夠區分出點,線,面等 //若是有種狀況獲取到的幾何對象的類型是IGeometry,那能夠經過這個判斷是什麼幾何類型,而後在as到對應的接口再作下一步操做 esriGeometryType geometryType = geometry.GeometryType; //獲取是否空幾何對象 //空幾何對象和null不一樣,例如點對象但是沒有點座標,線對象沒有一個點等等 //空幾何對象其中一種狀況是,從feature獲取到的幾何對象,多是空的,由於一條要素確定有一個對應的幾何對象,但是編輯時又能夠不錄入幾何對象(而只是錄入屬性字段值) bool isEmpty = geometry.IsEmpty; //矩形範圍(Envelope)操做~~~~~~~~~~~~~~~~~~~~~~~~~~~ IEnvelope envelope2 = polygon.Envelope; //獲取矩形的座標,矩形用最小點(左下角的點)和最大點(右上角的點)兩個點就足夠表示 double xmin = envelope2.XMin; double ymin = envelope2.YMin; double xmax = envelope2.XMax; double ymax = envelope2.YMax; //獲取矩形的寬和高 double height = envelope2.Height; double width = envelope2.Width; //經過座標建立矩形 envelope2 = new EnvelopeClass(); envelope2.PutCoords(100, 200, 300, 400); //擴大和縮小 //有兩種狀況,根據參數3設置,false=按長度,true=按比例 //下例是水平擴大10(米),垂直擴大20(米) envelope2.Expand(10, 20, false); //下例是水平設爲原來的0.8倍(能夠理解爲縮小了20%),垂直設爲原來的1.1倍(能夠理解爲放大了10%) envelope2.Expand(0.8, 1.1, true); //移動 //把矩形中心點移到某個點(實際是整個矩形移動) envelope2.CenterAt(point); //矩形轉面 //邏輯上矩形也是面,但在ae對象中IEnvelop和IPolygon不能互轉,下面是edm的轉換方法 polygon = GeometryHelper.EnvelopeToPolygon(envelope);
下面是其中用到的方法的代碼code
public static IPolygon EnvelopeToPolygon(IEnvelope envelope) { IPointCollection pointColl = new PolygonClass(); IPoint point = new PointClass(); point.PutCoords(envelope.XMin, envelope.YMin); pointColl.AddPoint(point); point = new PointClass(); point.PutCoords(envelope.XMax, envelope.YMin); pointColl.AddPoint(point); point = new PointClass(); point.PutCoords(envelope.XMax, envelope.YMax); pointColl.AddPoint(point); point = new PointClass(); point.PutCoords(envelope.XMin, envelope.YMax); pointColl.AddPoint(point); point = new PointClass(); point.PutCoords(envelope.XMin, envelope.YMin); pointColl.AddPoint(point); return pointColl as IPolygon; }