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還有許多的方法都非常實用,這裡就不一一講解了。