在用ArcGIS For JS开发地图过程中,距离与面积的量算功能是比较常用的,下面我们来看看实现量算功能的三种方法。
1.GeometryService
GeometryService是ArcGIS For JS提供的一种服务,需要依赖ArcGIS发布的几何服务
(1)定义geometryService
var geometryService = new GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
dojo.connect(geometryService, "onLengthsComplete", this.lengthsCompleteHandler);
dojo.connect(geometryService, "onSimplifyComplete",this.geometryService_simplifyCompleteHandler);
(2)在drawTool的draw-end事件中添加代码
距离量算
var drawLine = new esri.geometry.Polyline(event.geometry);
var lengthParams = new esri.tasks.LengthsParameters();
lengthParams.polylines = [drawLine];
lengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER;
lengthParams.geodesic = true;
lengthParams.polylines[0].spatialReference = new esri.SpatialReference(4490);
geometryService.lengths(lengthParams);
latestEndpoint = drawLine.paths[0][0];
//把线添加到地图
var g = new Graphic(event.geometry, lengthLine);
myGraphicsLayer2.add(g);
面积量算
addPolygonToMap(event.geometry);
projectPolygon(event.geometry);
(3)结果处理
距离
lengthsCompleteHandler: function (event) {
var dist = event.lengths[0];
var myAttributes = {};
var lengthSymbol = new TextSymbol().setColor(myUtity.GetColorUint("00ff00", 1)).setAlign(Font.ALIGN_START).setFont(new Font("14px").setWeight(Font.WEIGHT_BOLD));
if (dist < 3000) {
lengthSymbol.setText("长度为:" + dist.toFixed(2) + "米");
} else {
lengthSymbol.setText("长度为:" + parseFloat(dist / 1000).toFixed(2) + "