Arcgis Engine(ae)接口詳解(5):IGeometry幾何基礎操做

//點操做~~~~~~~~~~~~~~~~~~~~~~~~~

            //經過座標生成點
            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;
        }
相關文章
相關標籤/搜索