arcgis api for javascript 距離與面積量算

來源:互聯網
上載者:User

在之前的實驗中,距離量算跟面積量算一直出問題,費了很長的時間,各種調式找不到原因。現在成功完成,與君共勉

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]) + "米");}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.