本文主要介紹利用GeometryService實現面積和長度的計算。首先看一下實現本功能的主要過程:

接下來就一步步介紹實現本功能的具體步驟和方法:
(本文的代碼來自https://developers.arcgis.com/javascript/jssamples/util_measurepoly.html,本文只是提煉部分核心代碼,講解實現的思路,如需獲取所有代碼,請參考上述鏈接)
1、創建Draw對象
var tb = new Draw(map);
tb.on("draw-end", lang.hitch(map, getAreaAndLength));
tb.activate(Draw.FREEHAND_POLYGON);
2、創建GeomeService對象
var geometryService = new GeometryService("http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer");
geometryService.on("areas-and-lengths-complete", outputAreaAndLength);
3、getAreaAndLength方法的實現,注意本方法只有在draw-end事件觸發時才會執行
function getAreaAndLength(evtObj) {
var map = this,
geometry = evtObj.geometry;
map.graphics.clear();
var graphic = map.graphics.add(new Graphic(geometry, new SimpleFillSymbol()));
//setup the parameters for the areas and lengths operation
var areasAndLengthParams = new AreasAndLengthsParameters();
areasAndLengthParams.lengthUnit = GeometryService.UNIT_FOOT;
areasAndLengthParams.areaUnit = GeometryService.UNIT_ACRES;
areasAndLengthParams.calculationType = "geodesic";
geometryService.simplify([geometry], function (simplifiedGeometries) {
areasAndLengthParams.polygons = simplifiedGeometries;
geometryService.areasAndLengths(areasAndLengthParams);
});
}
4、outputAreaAndLength方法的實現,注意,本方法只有GeomeService對象計算完面積和周長才會觸發
function outputAreaAndLength(evtObj) {
var result = evtObj.result;
console.log(json.stringify(result));
dom.byId("area").innerHTML = result.areas[0].toFixed(3) + " acres";
dom.byId("length").innerHTML = result.lengths[0].toFixed(3) + " feet";
}
下面看一下效果圖:

