想找一個不依賴GeometryService量算面積的方法,經過別人的幫助,終於在js幫助頁上找到了。就是esri/geometry/geodesicUtils中的geodesicAreas方法,該方法通過Geometry獲取其面積,在geodesicUtils還有一個獲取幾何要素長度的方法,geodesicLengths,可以用來獲取長度。
當然,在使用這些方法之前,有些需要將Geometry轉換一下投影,可以使用Geometry下的webMercatorUtils,在其中有webMercatorToGeographic(geometry)和geographicToWebMercator(geometry)這兩個方法。不然,轉出來的面積長度有可能是不對的。
下面是我做的一個例子,結合了draw這個方法:
畫線和畫面:
function measureLenght() {
toolbar.activate(esri.toolbars.Draw.POLYLINE);
}
function measureArea() {
toolbar.activate(esri.toolbars.Draw.POLYGON);
}
在地圖初始化的時候添加監聽畫圖的事件:
dojo.connect(toolbar, "onDrawEnd", GetLenthorArea);
量算面積和長度方法:
function GetLenthorArea(geometry) {//畫圖完畢后計算距離或者面積
if (geometry.type == "polyline") {
var geo = esri.geometry.webMercatorToGeographic(geometry);
var Length = esri.geometry.geodesicLengths([geo], esri.Units.METERS);
Map.infoWindow.setContent("距離:" + Length+ "米");
Map.infoWindow.show();
}
else if(geometry.type == "polygon") {
var geo = esri.geometry.webMercatorToGeographic(geometry);
var Area = esri.geometry.geodesicAreas([geo], esri.Units.SQUARE_METERS);
Map.infoWindow.setContent("面積:" + Area + "平方米");
Map.infoWindow.show();
}
}
最后,別忘了添加引用