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


首先量測

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM