1. 程式人生 > >Android Arcgis入門(七)、利用GeometryEngine座標轉換、計算距離與面積等

Android Arcgis入門(七)、利用GeometryEngine座標轉換、計算距離與面積等

GeometryEngine是Arcgis的重要工具類,利用此工具類,可以計算地圖上的距離、面積,將點、線、面轉化為Json資料,將Json轉化為點線面,座標轉換作用非常強大。

一、座標轉化

將用到方法 GeometryEngine.project(Geometry geometry, SpatialReference inputSR, SpatialReference outputSR),第二個為Geometry的座標,第三個引數為要轉換的座標。如果將84座標轉換為墨卡託座標程式碼如下:

    Point point1 = new Point(113,23);
    Point point2 =(Point)GeometryEngine.project
(point1,SpatialReference.create(SpatialReference.WKID_WGS84), SpatialReference.create(SpatialReference.WKID_WGS84_WEB_MERCATOR));

二、GeometryEngine計算兩點的距離

用到 GeometryEngine.geodesicDistance(Geometry geometry1, Geometry geometry2, SpatialReference spatialReference, LinearUnit distanceUnit)方法。注意最好不要用GeometryEngine.distance方法,此方法是計算2D長度的,計算不準確。程式碼如下:

Point point1 = new Point(113,23);
Point point2 = new Point(113,24);
  double distance = GeometryEngine.geodesicDistance(point3,point4, SpatialReference.create(SpatialReference.WKID_WGS84), new LinearUnit(LinearUnit.Code.KILOMETER));
Log.i("TAG","distance ==="+distance );

將上面的程式碼執行,發現distance為110.75107527319621,我們帶入的單位是km也就是110km,而1緯度相差110KM左右。計算還是比較準確的。

三、GeometryEngine計算面積

用到的方法是 GeometryEngine.geodesicArea(Geometry geometry, SpatialReference spatialReference, AreaUnit areaUnit),做個測試的程式碼。

   Polygon polygon = new Polygon();
        polygon.startPath(new Point(110,13));
        polygon.lineTo(new Point(115,13));
        polygon.lineTo(new Point(115,23));
        double area = GeometryEngine.geodesicArea(polygon,SpatialReference.create(SpatialReference.WKID_WGS84),new AreaUnit(AreaUnit.Code.SQUARE_METER));//單位為平方米

四、計算周長

如果我們要計算一條線或一個面的周長是,可以用到這個方法 GeometryEngine.geodesicLength(Geometry geometry, SpatialReference spatialReference, LinearUnit lengthUnit),直接上程式碼:

 Polyline polyline = new Polyline();
        polyline.startPath(new Point(110,13));
        polyline.lineTo(new Point(115,13));
        polyline.lineTo(new Point(115,23));
        double length = GeometryEngine.geodesicLength(polyline,SpatialReference.create(SpatialReference.WKID_WGS84),new LinearUnit(LinearUnit.Code.METER));

另外,GeometryEngine還有許多的方法都非常實用,這裡就不一一講解了。