ArcGIS api for javascript—測量,測距問題

來源:互聯網
上載者:User

標籤:imp   空間   win   url   let   rpo   tle   etc   ase   

首先量測

  var map, toolbar, geometryService ;      function init() {             map=new esri.Map("map",{          extent:new esri.geometry.Extent({xmin:110,ymin:31 ,xmax:117 ,ymax :37,spatialReference:{wkid:4326} })     });//選取的空間座標系範圍         dojo.connect(map, "onLoad", initToolbar);               map.addLayer(new esri.layers.ArcGISTiledMapServiceLayer("url");             } function initToolbar(map) {               toolbar = new esri.toolbars.Draw(map);                 //添加toolbar畫圖完成後事件監聽調用    doMeasure        dojo.connect(toolbar, "onDrawEnd", doMeasure);        //執行個體化GeometryService,地址為ags發布的GeometryServer         var geomrtryserver ="url2";        geometryService = new esri.tasks.GeometryService(geomrtryserver);       }

  

//量測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);      //清除上一次的畫圖內容      map.graphics.clear();      map.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, map.spatialReference);      map.infoWindow.setTitle("距離測量");      map.infoWindow.setContent(" 測 量 長 度 : <strong>" + parseInt(String(result.lengths[0])) + "米</strong>");      map.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, map.spatialReference);      map.infoWindow.setTitle("面積測量");      map.infoWindow.setContent(" 面積 : <strong>" + parseInt(String(result.areas[0])) + "平方米</strong> 周長:" + parseInt(String(result.lengths[0])) + "米");      map.infoWindow.show(CurPos);      //alert("面積:" + dojo.number.format(result.areas[0]) + "平方米" + " 長度:" + dojo.number.format(result.lengths[0]) + "米");  }  

  

 

ArcGIS api for javascript—測量,測距問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.