在之前的實驗中,距離量算跟面積量算一直出問題,費了很長的時間,各種調式找不到原因。現在成功完成,與君共勉
1、距離量算中 lengthParams.polylines = [geometry];
2、面積量算中 this.outSR = new esri.SpatialReference({ wkid: 102113 });
geometryService.project([geometry], this.outSR, function (geometry) {
geometryService.simplify(geometry, function (simplifiedGeometries) {
areasAndLengthParams.polygons = simplifiedGeometries;
areasAndLengthParams.polygons[0].spatialReference = new esri.SpatialReference(102113);
geometryService.areasAndLengths(areasAndLengthParams);
});
});
還有面積量算中跟距離量算有所不同,需要進行投影變換!因為一般咱們的底圖座標係為4326
//量測function measutreLength() { toolbar.activate(esri.toolbars.Draw.POLYLINE);}function measutreArea() { toolbar.activate(esri.toolbars.Draw.POLYGON);}
//量算function doMeasure(geometry) { //更加類型設定顯示樣式 measuregeometry = geometry; toolbar.deactivate(); switch (geometry.type) { case "polyline": var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0]), 2); break; case "polygon": var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NONE, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255, 0, 0]), 2), new dojo.Color([255, 255, 0, 0.25])); break; } //設定樣式 var graphic = new esri.Graphic(geometry,symbol); //清除上一次的畫圖內容 myMap.graphics.clear(); myMap.graphics.add(graphic); //進行投影轉換,完成後調用projectComplete MeasureGeometry(geometry);}//投影轉換完成後調用方法function MeasureGeometry(geometry) { //如果為線類型就進行lengths距離測算 if (geometry.type == "polyline") { var lengthParams = new esri.tasks.LengthsParameters(); lengthParams.polylines = [geometry]; lengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER; lengthParams.geodesic = true; lengthParams.polylines[0].spatialReference = new esri.SpatialReference(4326); geometryService.lengths(lengthParams); dojo.connect(geometryService, "onLengthsComplete", outputDistance); } //如果為面類型需要先進行simplify操作在進行面積測算 else if (geometry.type == "polygon") { var areasAndLengthParams = new esri.tasks.AreasAndLengthsParameters(); areasAndLengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER; areasAndLengthParams.areaUnit = esri.tasks.GeometryService.UNIT_SQUARE_METERS; this.outSR = new esri.SpatialReference({ wkid: 102113 }); geometryService.project([geometry], this.outSR, function (geometry) { geometryService.simplify(geometry, function (simplifiedGeometries) { areasAndLengthParams.polygons = simplifiedGeometries; areasAndLengthParams.polygons[0].spatialReference = new esri.SpatialReference(102113); geometryService.areasAndLengths(areasAndLengthParams); }); }); dojo.connect(geometryService, "onAreasAndLengthsComplete", outputAreaAndLength); }}//顯示測量距離function outputDistance(result) { var CurX = measuregeometry.paths[0][measuregeometry.paths[0].length - 1][0]; var CurY = measuregeometry.paths[0][measuregeometry.paths[0].length - 1][1]; var CurPos = new esri.geometry.Point(CurX, CurY, myMap.spatialReference); myMap.infoWindow.setTitle("距離測量"); myMap.infoWindow.setContent(" 測 量 長 度 : " + parseInt(String(result.lengths[0])) + "米"); myMap.infoWindow.show(CurPos);}//顯示測量面積function outputAreaAndLength(result) { var CurX = (measuregeometry._extent.xmax + measuregeometry._extent.xmin) / 2; var CurY = (measuregeometry._extent.ymax + measuregeometry._extent.ymin) / 2 var CurPos = new esri.geometry.Point(CurX, CurY, myMap.spatialReference); myMap.infoWindow.setTitle("面積測量"); myMap.infoWindow.setContent(" 面積 : " + parseInt(String(result.areas[0])) + "平方米 周長:" + parseInt(String(result.lengths[0])) + "米"); myMap.infoWindow.show(CurPos); //alert("面積:" + dojo.number.format(result.areas[0]) + "平方米" + " 長度:" + dojo.number.format(result.lengths[0]) + "米");}