1. 程式人生 > >arcgis測量面積長度

arcgis測量面積長度

//放大
function zoomBig() {

map.setZoom(map.getZoom()+1);
};


// 縮小
function zoomSmall() {

map.setZoom(map.getZoom()-1);
};


// 全圖
function zoomTotal() {
restMapToolBarImg();
$(".d2_li").attr("src", "./images/2d3d_ed.png");
map.setExtent(initialExtent);
};




var toolbar_measure=null;
var measuregeometry;
var geometryService;


function initToolbar() {
toolbar_measure = new esri.toolbars.Draw(map);
    //新增toolbar畫圖完成後事件監聽呼叫    doMeasure
    dojo.connect(toolbar_measure, "onDrawEnd", doMeasure);
    //例項化GeometryService
    var serviceurl=SysConfigInfo.getLayerURL("geometryservice");
    geometryService = new esri.tasks.GeometryService(serviceurl);
}


var lengthClick=true;
// 測距
function zoomLength() {
//restMapToolBarImg();
areaClick=true;
if(lengthClick){
canelMarker();
$(".rang_li").attr("src", "./images/rang_ed.png");
if(toolbar_measure==null)initToolbar();
map.graphics.clear(); 
toolbar_measure.activate(esri.toolbars.Draw.POLYLINE); 
canMouseSearch=false;
lengthClick=false;
}else{
lengthClick=true;

restMapToolBarImg();
toolbar_measure.deactivate();
}

};
var areaClick=true;
// 測面積
function zoomSquare() {
lengthClick=true;
if(areaClick){
//restMapToolBarImg();
canelMarker();
$(".area_li").attr("src", "./images/area_ed.png");
if(toolbar_measure==null)initToolbar();
map.graphics.clear(); 
toolbar_measure.activate(esri.toolbars.Draw.POLYGON);
canMouseSearch=false;
areaClick=false;
}else{
areaClick=true;

restMapToolBarImg();
toolbar_measure.deactivate();
}

};





//量算  
function doMeasure(geometry) { 
measuregeometry = geometry;   
toolbar_measure.deactivate();  
    var symbol="";
    switch (geometry.type) {  
        case "polyline":  
            symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, 
                new dojo.Color([0, 0, 0]), 2);  
            break;  
        case "polygon":  
            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.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({"wkt":"PROJCS[\"CGCS_2000_Albers\",GEOGCS[\"GCS_CGCS_2000\",DATUM[\"D_CGCS_2000\",SPHEROID[\"CGCS_2000\",6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Albers\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",105.0],PARAMETER[\"standard_parallel_1\",25.0],PARAMETER[\"standard_parallel_2\",47.0],PARAMETER[\"latitude_of_origin\",0.0],UNIT[\"Meters\",1.0]]"});  
        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({"wkt":"PROJCS[\"CGCS_2000_Albers\",GEOGCS[\"GCS_CGCS_2000\",DATUM[\"D_CGCS_2000\",SPHEROID[\"CGCS_2000\",6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Albers\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",105.0],PARAMETER[\"standard_parallel_1\",25.0],PARAMETER[\"standard_parallel_2\",47.0],PARAMETER[\"latitude_of_origin\",0.0],UNIT[\"Meters\",1.0]]"});  
        geometryService.project([geometry], this.outSR, function (geometry) {  
            geometryService.simplify(geometry, function (simplifiedGeometries) {  
                areasAndLengthParams.polygons = simplifiedGeometries;  
                areasAndLengthParams.polygons[0].spatialReference = new esri.SpatialReference({"wkt":"PROJCS[\"CGCS_2000_Albers\",GEOGCS[\"GCS_CGCS_2000\",DATUM[\"D_CGCS_2000\",SPHEROID[\"CGCS_2000\",6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Albers\"],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0],PARAMETER[\"central_meridian\",105.0],PARAMETER[\"standard_parallel_1\",25.0],PARAMETER[\"standard_parallel_2\",47.0],PARAMETER[\"latitude_of_origin\",0.0],UNIT[\"Meters\",1.0]]"});  
                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.getExtent().xmax + measuregeometry.getExtent().xmin) / 2;  
    var CurY = (measuregeometry.getExtent().ymax + measuregeometry.getExtent().ymin) / 2; 
    var CurPos = new esri.geometry.Point(CurX, CurY, map.spatialReference);  
    map.infoWindow.setTitle("面積測量");  
    map.infoWindow.setContent(" 面積:" + parseInt(String(result.areas[0])) + "平方米(" + parsefloat(String(0.0015*result.areas[0])) + "畝) <br>\
        周長:" + parseInt(String(result.lengths[0])) + "米");  
    map.infoWindow.show(CurPos);  
}  




//地圖列印
function printMap(){
//restMapToolBarImg();
canelMarker();
if(toolbar_measure!==null){
toolbar_measure.deactivate();
}
areaClick=true;
lengthClick=true;
$(".print_li").attr("src", "./images/print_ed.png");
require(["esri/tasks/PrintTemplate",
"esri/tasks/PrintTask",
"esri/tasks/PrintParameters"], function (PrintTemplate, PrintTask, PrintParameters) {
//建立地圖列印物件
debugger
var printUrl = SysConfigInfo.getLayerURL("PrintService");
var printMap = new PrintTask(printUrl);


//建立地圖列印模版
var template = new PrintTemplate();
//建立地圖的列印引數,引數裡面包括:模版和地圖
var params = new PrintParameters();
//輸出圖片的空間參考
printMap.outSpatialReference = map.SpatialReference;
//列印圖片的各種引數
template.exportOptions = {
width: 1000,
height: 1000,
dpi: 96
};


var tText = "地圖列印";
var aText = "map";
var tempString = "map";
//列印輸出的格式
template.format = "PDF";
//輸出地圖的佈局
template.layout = "A4 Landscape";
//        template.showLabels="true";
//設定列印地圖排版資訊
template.layoutOptions = {
"hasCustomTextElements": true,
"authorText": aText,
"copyrightText": tempString,
"legendLayers": [],
"titleText": tText,
"scalebarUnit": "Kilometers",
"customTextElements": [{ "Text": "123456" },
{ "SubTitle": "Te123456" }
]
};
//設定引數地圖
params.map = map;
//設定引數模版
params.template = template;
//執行結果
printMap.execute(params, function (result) {
//網頁開啟生成的地圖
if (result != null) {
// debugger;
url = result.url;
printevent(url);
}
});
});
}




function printevent(url) {
// 開啟頁面,此處最好使用提示頁面
var newWin = window.open("rest/page/index");
var ajax = $.ajax({
});
//    addWaterMarker("中科天啟",url);
ajax.done(function () {
// 重定向到目標頁面
newWin.location.href = url;
});
}




/**
 * 書籤方法
 */
var point;
function bookMark() {


restMapToolBarImg();
if(toolbar_measure!==null){
toolbar_measure.deactivate();
}
areaClick=true;
lengthClick=true;
// 顯示書籤的提示資訊
//bookMarkTips();
if(canMark){
mark = true;
canMark=false;
$(".bookmark_li").attr("src", "./images/bookmark_ed.png");
}else{
mark = false;
canMark=true;
}

}




/**
 * 書籤提示資訊---文字跟隨圖示移動
 */
function bookMarkTips() {
// $("#map_div").prepend("#bookmarkTxt");


$("#bookmarkTxt").show();
var container = document.getElementById("map_div");
var p = container.getElementsByTagName("span");


document.onmousemove = function () {
p[0].style.left = event.clientX + 20 + "px";
p[0].style.top = event.clientY + 6 + "px";
for (var i = 1; i < p.length; i++) {
p[i].style.left = p[i - 1].offsetLeft + "px";
p[i].style.top = p[i - 1].offsetTop + "px";
}
}
}


function addMarker(xx, yy, screenpoint) {
if (mark) {
//設定標註的經緯度
var pt = new esri.geometry.Point(xx, yy, map.spatialReference);
var symbol1 = new esri.symbol.PictureMarkerSymbol("images/locat.png", 25, 25);
var graphic = new esri.Graphic(pt, symbol1);
markgraphicLayer.add(graphic);
//$("#bookmarkTxt").hide();
openWindow(screenpoint);
point = pt;
}


}




/**
 * 開啟資訊視窗
 */
function openWindow(screenpoint) {
var oDiv = document.createElement('div');
oDiv.setAttribute("id", "oDiv");
oDiv.style.left = screenpoint.x + 'px';  // 指定建立的DIV在文件中距離左側的位置
oDiv.style.top = screenpoint.y + 'px';  // 指定建立的DIV在文件中距離頂部的位置
var index_content = '<label>標記點採集</label>' +
'<span>描述:</span><textarea id="bz" style="margin-left:46px;margin-bottom:9px;"></textarea>' +
'<div class="btnGroup_div" style="float:right;margin-right:10px;"><button class="canelBtn btn btn-sm btn-success" onclick="canelMarker()" style="margin-right: 6px;">取消</button>' +
'<button class="saveBtn btn btn-sm btn-info" onclick="saveMarker()">儲存</button></div>';


// $(index_content).appendTo("#oDiv");
document.body.appendChild(oDiv);
$("#oDiv").append(index_content);
}


/**
 * 儲存興趣點
 */
function saveMarker() {
var content = $("#bz").val();
var time = getNowFormatDate();

require(["esri/layers/FeatureLayer", "esri/graphic"], function (FeatureLayer, Graphic) {
var attr = { "UserID": userid, "Content": content, "MarkTime": time };
var symbol1 = new esri.symbol.PictureMarkerSymbol("images/locat.png", 25, 25);
//markgraphicLayer.clear();
var graphic = new Graphic(point, symbol1, attr, null);
var markurl = SysConfigInfo.getLayerURL("interestmarkpoint");
markurl = markurl.replace("MapServer", "FeatureServer/0");
var interestLayer = new FeatureLayer(markurl);
interestLayer.applyEdits([graphic], null, null, function () {
alert("新增成功!");
canelMarker();
/*swal({
title: "",
text: "儲存成功",
type: "success",
});*/
mark = false;
canMark = true;
dynamicservice_interest.refush();
dynamicservice_interest.visible=true;
/*restMapToolBarImg();
canelMarker();
var layer = map_home.getLayer("101");
layer.refresh();*/
});
});
}


/**
 * 取消興趣點
 */
function canelMarker() {
restMapToolBarImg();
mark = false;
canMark=true;


var node = document.getElementById('oDiv');//通過id你要刪除的div
if (node != null) {
document.body.removeChild(node);
}
//if(hassaved==0){
markgraphicLayer.clear();



//}
}




/**
 * 刪除標籤
 */
function dropMark() {
require(["esri/layers/FeatureLayer", "esri/graphic", "esri/dijit/editing/Delete"],
function (FeatureLayer, Graphic, Delete) {
$.post("rest/dataoperate/dropMark", { id: thisOBJECTID }, function (result) {
if (result) {
alert("刪除成功!");
var layer = dynamicservice_interest;;
layer.refresh();
markgraphicLayer.clear();
map.infoWindow.hide();
} else {
alert("刪除失敗");
}
});
});
}






/**
 * 獲取時間
 * @returns {String}
 */
function getNowFormatDate() {
    var date = new Date();
    var seperator1 = "-";
    var seperator2=":";
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var strDate = date.getDate();
    var hour=date.getHours();
    var minutes=date.getMinutes();
    var seconds=date.getSeconds();
    if (month >= 1 && month <= 9) {
        month = "0" + month;
    }
    if (strDate >= 0 && strDate <= 9) {
        strDate = "0" + strDate;
    }
    if(hour<10){
    hour = "0" + hour;
    }
    if(minutes<10){
    minutes = "0" + minutes;
    }
    if(seconds<10){
    seconds = "0" + seconds;
    }
    var currentdate = year + seperator1 + month + seperator1 + strDate+" "+hour+seperator2+minutes+seperator2+seconds;
    return currentdate;
}


/**
 * 興趣點圖層符號化
 */
function markMapShowPoint(){
var symbol1 = new esri.symbol.PictureMarkerSymbol("images/locat.png", 25, 25);
var query = new esri.tasks.Query();
query.returnGeometry = true;
query.where="1='1'";
var queryTask = new esri.tasks.QueryTask(SysConfigInfo.getLayerURL("interestmarkpoint")+ "/0");
queryTask.execute(query, function(results) {
var arr=results.features;
if(arr.length>0){
for(var i=0;i<arr.length;i++){
var point = arr[i].geometry;
var graphic = new esri.Graphic(point, symbol1);
markgraphicLayer.add(graphic);
}
}
});
}


/**
 * //恢復所有的地圖工具欄圖示
 */
function restMapToolBarImg() {
$(".d2_li").attr("src", "./images/2d3d.png");
$(".rang_li").attr("src", "./images/rang.png");
$(".area_li").attr("src", "./images/area.png");
$(".bookmark_li").attr("src", "./images/bookmark.png");
$(".print_li").attr("src", "./images/print.png");
}