arcgis api for js 圖層調用及屬性修改


效果圖:

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE HTML>

<%@include file="/context/mytags.jsp"%>
<html>
<head>
<meta charset="utf-8">
<link rel="icon" href="https://static.jianshukeji.com/highcharts/images/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1">    
<script type="text/javascript" src="plug-in/jquery/jquery-1.8.3.js"></script>
<script type="text/javascript" src="plug-in/Highcharts-2.2.5/highcharts.js"></script>
<script type="text/javascript" src="plug-in/Highcharts-2.2.5/modules/exporting.js"></script>
<link rel="stylesheet" type="text/css"
    href="http://192.168.2.10:8080/ljms/arcgis_js_api/3.9/js/dijit/themes/tundra/tundra.css" /> <%-- 內網訪問,需要將IP修改為服務器IP,不能為localhost --%>
<link rel="stylesheet" type="text/css"
    href="http://192.168.2.10:8080/ljms/arcgis_js_api/3.9/js/esri/css/esri.css" />
<link rel="stylesheet" type="text/css"
    href="http://192.168.2.10:8080/ljms/arcgis_js_api/3.9/js/esri/css/main.css" />
<link rel="stylesheet" type="text/css"
    href="http://192.168.2.10:8080/ljms/arcgis_js_api/3.9/js/dijit/themes/claro/claro.css" />
<script type="text/javascript"
    src="http://192.168.2.10:8080/ljms/arcgis_js_api/3.9/init.js"></script>

<style>
  #mapDiv {
      padding: 0;
      margin: 0;
      height: 200%;
      width: 100%;
    }
  #search {
    display: block;
    position: absolute;
    z-index: 3;
    top: 20px;
    left: 75px;
  }
</style><script>

var CITY_DATA={  
    "total":8,  
    "items":[
        {"id":0,"name":"A公司","X":87.602117,"Y":42.790939},  
        {"id":1,"name":"B公司","X":117.484777,"Y":34.045128},  
        {"id":2,"name":"C公司","X":115.380243,"Y":39.98116},  
        {"id":3,"name":"D公司","X":107.0365,"Y":34.667072},  
        {"id":4,"name":"E公司","X":91.13605,"Y":29.653589},  
        {"id":5,"name":"F公司","X":119.287813,"Y":26.01859},  
        {"id":6,"name":"G公司","X":101.750053,"Y":32.066039},  
        {"id":7,"name":"H公司","X":104.319768,"Y":21.806543},  
    ]  
};
var JTJ_DATA={  
    "total":14,  
    "items":[
        {"id":0,"name":"0組織機構","X":52.748,"Y":39.909},  
        {"id":1,"name":"1組織機構","X":122.484,"Y":41.115},
        {"id":2,"name":"2組織機構","X":115.700,"Y":38.857},
        {"id":3,"name":"3組織機構","X":126.315,"Y":43.893}, 
        {"id":4,"name":"4組織機構","X":116.107,"Y":35.704},
        {"id":5,"name":"5組織機構","X":106.510,"Y":29.558},
        {"id":6,"name":"6組織機構","X":114.878,"Y":40.817},
        {"id":7,"name":"7組織機構","X":118.186,"Y":35.267}, 
        {"id":8,"name":"8組織機構","X":120.097,"Y":30.866},  
        {"id":9,"name":"9組織機構","X":114.868,"Y":35.307},
        {"id":10,"name":"10組織機構","X":117.392,"Y":23.088},  
        {"id":11,"name":"11組織機構","X":108.402,"Y":25.310}, 
        {"id":12,"name":"12組織機構","X":107.138,"Y":34.382},
        {"id":13,"name":"13組織機構","X":118.144,"Y":26.735}  
    ]  
};

var ZQ_DATA;
var JTJ_NUM;
$(function(){
    var groupNames=new Array(8);
    for (var i=0; i<CITY_DATA.items.length; i++) {
        groupNames[i] = CITY_DATA.items[i].name;
    }
    //通過ajax請求獲取公司級別的甲產品、乙產品、丙產品數量
    $.ajax( {  
        url:'ljStatisticController.do?getStaNumForIndex',// 跳轉到 action  
        data:{  
            groupNames:"A公司,B公司,C公司,D公司,E公司,F公司,G公司,H公司"
        },  
        type:'post',  
        cache:false,  
        async : false,
        dataType:'json',  
        success:function(data) {  
            ZQ_DATA = data;
            //alert(ZQ_DATA.obj[0].pmapnum);
         },  
         error : function() {  
              alert("異常!");  
         }
    });
    //通過ajax請求獲取組織機構級別的甲產品、乙產品、丙產品數量
    $.ajax( {  
        url:'ljStatisticController.do?getStaNumForIndex',// 跳轉到 action  
        data:{  
            groupNames:"0組織機構,1組織機構,2組織機構,3組織機構,4組織機構,5組織機構,6組織機構,7組織機構,8組織機構,9組織機構,10組織機構,11組織機構,12組織機構,13組織機構"
        },  
        type:'post',  
        cache:false,  
        async : false,
        dataType:'json',  
        success:function(data) {  
            JTJ_NUM = data;
            //alert(ZQ_DATA.obj[0].pmapnum);
         },  
         error : function() {  
              alert("異常!");  
         }
    });
});

require([
         "dojo/dom-construct",
         "dojo/dom-class",
         "esri/map",
         "esri/dijit/Popup", 
         "esri/dijit/PopupTemplate",
         "esri/symbols/SimpleFillSymbol", 
         "esri/symbols/SimpleLineSymbol",
         "esri/renderers/SimpleRenderer",
         "esri/Color",
         "esri/layers/GraphicsLayer",
         "esri/layers/LabelLayer",
         "esri/symbols/PictureMarkerSymbol",
         "esri/symbols/SimpleMarkerSymbol",
         "esri/symbols/TextSymbol",
         //"esri/symbols/Font",
         "esri/geometry/Point",
         "esri/layers/FeatureLayer",
         "esri/geometry/Extent",
         "esri/InfoTemplate",
         "dojo/domReady!",
         "dojo/dom",
         "dojo/json",
         "dojox/charting/Chart", 
         "dojox/charting/themes/Dollar",
         "esri/tasks/QueryTask",
         "esri/tasks/query",
         "esri/dijit/editing/Update"
       ], function(
           domConstruct,
           domClass,
           Map,
           Popup,
           PopupTemplate,
           SimpleFillSymbol,
           SimpleLineSymbol,
           SimpleRenderer,
           Color,
           //Font,
           GraphicsLayer,
           LabelLayer,
           PictureMarkerSymbol,
           SimpleMarkerSymbol,
           TextSymbol,
           Point,
           FeatureLayer,
           Extent,
           InfoTemplate,
           Chart, 
           theme,
           QueryTask,
           query,
           jsonUtil,
           Update,
           dom
         ) {
           var bounds = new Extent({
             "xmin":67.91203396031673,
             "ymin": 3.8196613667440213,
             "xmax":136.49127655152418,
             "ymax": 54.69378269257668,
             "spatialReference":{"wkid":4214}
           });

           var fill = new SimpleFillSymbol("solid", null, new Color("#ca67ce"));
           var popup = new Popup({
               fillSymbol: fill,
               titleInBody: false
           }, domConstruct.create("div"));
           domClass.add(popup.domNode, "dark");
           
           
           var map = new Map("mapDiv", {
               logo:false,
               extent: bounds,
               zoom: 4,
               sliderPosition:"top-right",
               infoWindow: popup
           });
           
           


           var f_line = new FeatureLayer("http://192.168.2.10:6080/arcgis/rest/services/test/city/MapServer/3",{"id":"lineLayer"});
           map.addLayer(f_line);
           
           var url = "http://192.168.2.10:6080/arcgis/rest/services/test/city/MapServer/4";
           var template = new PopupTemplate({
               title: "{NAME}>的數據統計信息",
               description: "甲產品:{PMAPNUM}<br/>乙產品:{DMAPNUM}<br/>丙產品:{BDNUM}",
               fieldInfos: [{ //define field infos so we can specify an alias
                 fieldName: "PMAPNUM",
                 label: "甲產品"
               },{
                 fieldName: "DMAPNUM",
                 label: "乙產品"
               },{
                 fieldName: "BDNUM",
                 label: "丙產品"
               }],
               mediaInfos:[{ //define the bar chart
                 caption: "",
                 type:"columnchart",
                 value:{
                   theme: "Dollar",
                   fields:["PMAPNUM","DMAPNUM","BDNUM"]
                 }
               }],
               
             });
           
           //var template2 = new InfoTemplate("選擇單位", "{NAME}");

           var f_zq = new FeatureLayer(url, {
             id: "zqLayer",
             mode: FeatureLayer.MODE_SNAPSHOT,//注意這里的mode一定要指定MODE_SNAPSHOT,否則每次放大或縮小或者是平移都會執行FeatureLayer的update-end操作 
             infoTemplate: template,
             //showLabels:true,
             outFields: ["*"]
           });
          
           map.addLayer(f_zq);
           
           var loginGroupOrder = $("#loginGroupOrder").val();
           if (loginGroupOrder=="2") { //級別
               var loginGroupName = $("#loginGroupName").val();
               var query = new esri.tasks.Query();
               query.where = "1=1"; 
               query.outFields = [ "*" ];
               f_zq.queryFeatures(query, function(featureSet) {
                   for (var i=0,i1=featureSet.features.length; i<i1; i++) {
                       var zqgraphic = featureSet.features[i];
                       //var name = feature.attributes.NAME; //ok
                       var name = zqgraphic.attributes["NAME"];
                       if (name!=loginGroupName) {
                           zqgraphic.setSymbol(new SimpleFillSymbol("solid", null, new Color("#dbf875")));
                           map.graphics.add(zqgraphic); //高亮顯示
                       }
                   }
               });
           }
           
           f_zq.on("update-end", function(){  
               //輸出其中一個graphic(面要素)的所有屬性  
               for(var i=0;i<f_zq.graphics.length;i++){  
                   //自定義數據,在每個面要素中添加nico屬性  
                   var name = f_zq.graphics[i].attributes["NAME"];
                   f_zq.graphics[i].attributes["PMAPNUM"]=ZQ_DATA.obj[i].pmapnum;  
                   f_zq.graphics[i].attributes["DMAPNUM"]=ZQ_DATA.obj[i].dmapnum;  
                   f_zq.graphics[i].attributes["BDNUM"]=ZQ_DATA.obj[i].bdnum;  
               }
           });
           
           /*var renderer = new SimpleRenderer(new SimpleFillSymbol().setOutline(new SimpleLineSymbol().setWidth(0.1).setColor(new Color([128,128,128]))));  
           renderer.setColorInfo({  
               //使用nico屬性進行渲染  
               field: "nico",  
               minDataValue: 0,  
               maxDataValue: 40,  
               colors: [  
                   new Color([0, 255, 0]),  
                   new Color([255, 0, 0])  
               ]  
           });  
           f_zq.on("update-end", function(){  
               //輸出其中一個graphic(面要素)的所有屬性  
               for(var i = 0;i<f_zq.graphics.length;i++){  
                   //自定義數據,在每個面要素中添加nico屬性  
                   f_zq.graphics[i].attributes["nico"]=i;  
                   f_zq.graphics[i].attributes["PMAPNUM"]=i;  
                   f_zq.graphics[i].attributes["DMAPNUM"]=i;  
                   f_zq.graphics[i].attributes["BDNUM"]=i;  
               }  
               f_zq.setRenderer(renderer);  
               f_zq.redraw();  
               //輸出FeatureLayer中所有的graphic數  
               console.log("number of graphics in featureLayer:"+f_zq.graphics.length);  
               //輸出其中一個graphic(面要素)的所有屬性  
               console.log("10th graphic attributes in featureLayer:");  
               console.log(f_zq.graphics[10].attributes);  
           });*/
           
           
           //updateFeature(0);
           //updateFeature(1);
           //updateFeature(2);
           
           ////////////////////////
           /*f_zq.on("click", function(evt) {
               var objectId = evt.graphic.attributes.NAME;
               map.infoWindow.setTitle(objectId);
           });*/
           ////////////////////////
           
           
           /*var layerDefinition = {
                "geometryType": "esriGeometryPolygon",
                "fields": [{
                  "NAME": "A公司",
                  "type": "esriFieldTypeInteger",
                  "alias": "A公司"
                }]
           }; 
           var featureCollection = {
                layerDefinition: layerDefinition,
                featureSet: null
           };
           var testFeatureLayer = new FeatureLayer(featureCollection, {
                showLabels: true,
                infoTemplate: template
           });
           map.addLayer(testFeatureLayer);*/
           

           /////////////////////////////////
           function searchFeather(id,callback){ 
               //得到要素圖層的主鍵屬性 
               var idProperty = f_zq.objectIdField; //featureLayer有objectIdField, 但不是作為屬性,不能這樣取出來
               //alert(idProperty);
               //定義查詢參數 
               var query = new esri.tasks.Query(); 
               //是否返回幾何形狀 
               query.returnGeometry = false; 
               //圖層的主鍵名稱(根據自己要求修改) 
               query.objectIds = [id]; 
               //查詢條件1=1意思是:只根據主鍵查詢,忽略where子句 
               query.where = "1=1"; 
               //進行查詢 
               f_zq.selectFeatures(query, FeatureLayer.SELECTION_NEW,function(result){ 
                   //如果callback不存在,說明僅僅是查詢操作 
                   if(!callback){ 
                       //因為我們根據主鍵查詢,一定只有一個元素 
                       var graphic=result[0]; 
                       //獲得屬性 
                       var attributes=graphic.attributes;
                       //得到該屬性信息轉換成字符串 
                       var result=jsonUtil.stringify(attributes);
                   } else {//如果callback存在,說明是更新操作 
                       callback(result); 
                   } 
               }); 
           } 

             //根據id修改要素
           function updateFeature(id){
               //注意:(第二個參數)這里傳入一個回調函數,用於處理查詢出來的數據
               searchFeather(id,function(result){
                       //獲得舊的要素
                       var oldgraphic=result[0];
                       //新的要素
                       var newgraphic=new esri.Graphic(oldgraphic.toJson());
                       //將alias屬性修改為:修改后的C區
                       newgraphic.attributes.NAME="修改后的C區";
                       //創建更新對象
                       var update1=new Update({
                           "featureLayer":f_zq,
                           "postUpdatedGraphics":[newgraphic],//修改之后的要素
                           "preUpdatedGraphics":[oldgraphic]//修改之前的要素
                       });
                       //執行刷新操作
                       update1.performRedo();
                       //刷新視圖
                       f_zq.refresh();
                       alert("修改成功");
               });

           }
           /////////////////////////////////
           
           
        
           //dojo.connect(map, "onClick", executeQueryTask);//暫時屏蔽掉,目前不需要
           var queryTask = new esri.tasks.QueryTask(url);
           var query = new esri.tasks.Query();
           query.returnGeometry = true;
           query.outFields = ["NAME"];
   
           function executeQueryTask(evt) {
              //用戶點擊onClick事件返回地圖上EVT點.
              //包含在MapPoint(esri.geometry.point)和screenPoint(pixel像素點).
              //設置查詢幾何等於evt.mapPoint
              query.geometry = evt.mapPoint;
       
              //執行任務和完成showResults
              queryTask.execute(query, showResults);
           }
           var zqgraphic = null;
           function showResults(featureSet) {
               for (var i=0,i1=featureSet.features.length; i<i1; i++) {
                   if (zqgraphic!=null && zqgraphic!="") {                       
                       map.graphics.remove(zqgraphic); //去掉原來的高亮顯示
                   }
                   zqgraphic = featureSet.features[0];
                   //var name = feature.attributes.NAME; //ok
                   var name = zqgraphic.attributes["NAME"];
                   //TODO根據name執行查詢,用於管理模塊中的查詢
                   zqgraphic.setSymbol(fill);
                   map.graphics.add(zqgraphic); //高亮顯示
               }
               //alert("ss");
            }
           
           
           
           var chartLayer = new GraphicsLayer({"id":"chartLayer"});  
           map.addLayer(chartLayer);  
           //chartLayer.on("click",showDetailChart);  
           addReadPopup(CITY_DATA);  
           function addReadPopup(data){  
               var items= data.items;  
               for(var i=0;i<data.total;i++){  
                   var symbol = new PictureMarkerSymbol("images/bar.png",20,30);  
                   symbol.setOffset(-10,10);  
                   var pt=new Point(items[i].X,items[i].Y,map.spatialReference);  
                   var graphic = new esri.Graphic(pt,symbol,items[i]);  
                   chartLayer.add(graphic);  
               }; 
           };  
           
           var textLayer = new GraphicsLayer({"id":"textLayer"});  
           map.addLayer(textLayer);    
           addTextPopup(CITY_DATA);  
           function addTextPopup(data){  
               var items= data.items;  
               for(var i=0;i<data.total;i++){ 
                   var pt=new Point(items[i].X,items[i].Y,map.spatialReference);
                   var symbol = new TextSymbol(items[i].name);
                   symbol.setOffset(-10,-15);
                      var graphic = new esri.Graphic(pt,symbol, {});
                      textLayer.add(graphic);
               }; 
           };  
           
           var textLayerOfJTJ = new GraphicsLayer({"id":"jtjTextLayer"}); 
           var f_jituanjun = new FeatureLayer("http://192.168.2.10:6080/arcgis/rest/services/test/city/MapServer/5", {
               id: "jituanjunLayer",
               mode: FeatureLayer.MODE_SNAPSHOT,//注意這里的mode一定要指定MODE_SNAPSHOT,否則每次放大或縮小或者是平移都會執行FeatureLayer的update-end操作 
               infoTemplate: template,
               //showLabels:true,
               outFields: ["*"]
           });
           f_jituanjun.on("update-end", function(){  
               //輸出其中一個graphic(面要素)的所有屬性  
               for(var i=0;i<f_jituanjun.graphics.length;i++){  
                   //自定義數據,在每個面要素中添加nico屬性  
                   var name = f_jituanjun.graphics[i].attributes["NAME"];
                   f_jituanjun.graphics[i].attributes["PMAPNUM"]=JTJ_NUM.obj[i].pmapnum;  
                   f_jituanjun.graphics[i].attributes["DMAPNUM"]=JTJ_NUM.obj[i].dmapnum;  
                   f_jituanjun.graphics[i].attributes["BDNUM"]=JTJ_NUM.obj[i].bdnum;  
               }
           });
            
           var level=4;  
           map.on("zoom-end",function(zoom){  //縮放后,重繪graphics
               //去掉選擇的高亮顯示
               if (zqgraphic!=null && zqgraphic!="") {                       
                   map.graphics.remove(zqgraphic); //去掉原來的高亮顯示
               }
               
               var graphics = chartLayer.graphics;  
               var zoomFactor = zoom.zoomFactor;
               if (zoomFactor>=1) {
                   level = level + zoomFactor/2;
               } else {
                   level = level - 0.5/zoomFactor;
               }
               if (graphics.length>0) {
                   //var width = graphics[0].symbol.width;
                   //var height = graphics[0].symbol.height;
                   var width = level>3 ? 20 : 20/(4-level+1);
                   var height = level>3 ? 30 : 30/(4-level+1);
                   var symbol = new PictureMarkerSymbol("images/bar.png",width,height);
                   if (level>3) {                       
                       symbol.setOffset(-10,10);  
                   } else {
                       symbol.setOffset(-10/(4-level+1),10/(4-level+1));
                   }
                   for(var i=0;i<graphics.length;i++){  
                       graphics[i].symbol = symbol;  
                       chartLayer.redraw();  
                       textLayer.redraw();
                   }  
               }
               
               var items= CITY_DATA.items;
               var graphics2 = textLayer.graphics;
               if (graphics2.length>0) {
                   for(var i=0;i<graphics2.length;i++){
                       var symbol = new TextSymbol(items[i].name);;
                       if (level>3) {                       
                           symbol.setOffset(-10,-15);  
                       } else {
                           symbol.setOffset(-10/(4-level+1),-15/(4-level+1));
                       }
                       graphics2[i].symbol = symbol;
                       textLayer.redraw();  
                   }  
               }
               
               
               if (level>=5) { //縮放到5級時,添加組織機構級的圖層
                   map.addLayer(f_jituanjun); 
                   map.addLayer(textLayerOfJTJ);    
                   addTextPopupJTJ(JTJ_DATA);  
                   function addTextPopupJTJ(data){  
                       var items= data.items;  
                       for(var i=0;i<data.total;i++){ 
                           var pt=new Point(items[i].X,items[i].Y,map.spatialReference);
                           var symbol = new TextSymbol(items[i].name);
                           symbol.setOffset(-10,-20);
                              var graphic = new esri.Graphic(pt,symbol, {});
                              textLayerOfJTJ.add(graphic);
                       }; 
                   };  
               } else { //小於5級時,移除組織機構的圖層
                   map.removeLayer(f_jituanjun);
                   map.removeLayer(textLayerOfJTJ);
               }
           });  
           
           var f_zq_p = new FeatureLayer("http://192.168.2.10:6080/arcgis/rest/services/test/city/MapServer/0",{"id":"zqPointLayer"});
           map.addLayer(f_zq_p);
           
           var f_bj = new FeatureLayer("http://192.168.2.10:6080/arcgis/rest/services/test/city/MapServer/1",{"id":"bjLayer"});
           map.addLayer(f_bj);
            
           
         }
       );
</script>
</head>
<body>
<%--
 --%>
<div id="search"></div>
<%--
<a id="hidelj" href="#" class="">折疊</a>
 --%>
 <input type="hidden" id="loginGroupOrder" value="${sessionScope.LOCAL_CLINET_USER.currentDepart.departOrder}"/>
 <input type="hidden" id="loginGroupName" value="${sessionScope.LOCAL_CLINET_USER.currentDepart.departname}"/>
 <c:if test="${sessionScope.LOCAL_CLINET_USER.currentDepart.departOrder=='1'}">
<div id="container" style="max-width:300px;height:300px">
</div>
<div id="mapDiv" style="width:1700px; height:900px; margin-top: -300px;"class="MapClass">
</div>
</c:if>
 <c:if test="${sessionScope.LOCAL_CLINET_USER.currentDepart.departOrder!='1'}">
<div id="mapDiv" style="width:1700px; height:900px; "class="MapClass">
</div>
</c:if>
    

    <script>
    
    $("a#hidelj").click(function(){
        $("div#container").hide();
        $("div#mapDiv").css("style","width:1700px; height:900px; margin-top: 0px;");
    });
    $(function () {
        
        $.ajax({
            type : "POST",
            url : 'ljStatisticController.do?getLJStaNumForIndex&reportType=column',
            data:{  
                groupNames:"總公司"
            }, 
            success : function(jsondata) {
                data = eval(jsondata);

                var xAxisCategories = new Array();
                var yNum = new Array();
                for(var i = 0; i < data[0].data.length; i++){
                    xAxisCategories[i] = data[0].data[i].name;
                    yNum[i] = data[0].data[i].y;
                }
                
                
                $('#container').highcharts({
                    chart: {
                        type: 'column'
                    },
                    title: {
                        text: data[0].name
                    },
                    subtitle: {
                        text: ''
                    },
                    xAxis: {
                        categories: xAxisCategories,
                        crosshair: true
                    },
                    yAxis: {
                        min: 0,
                        title: {
                            text: '數量'
                        }
                    },
                    tooltip: {
                        headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
                        pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                        '<td style="padding:0"><b>{point.y:.lf}</b></td></tr>',
                        footerFormat: '</table>',
                        shared: true,
                        useHTML: true
                    },
                    plotOptions: {
                        column: {
                            pointPadding: 0.2,
                            borderWidth: 0,
                            dataLabels: {
                                enabled:true,
                                color:'#0000FF'
                            }
                        },
                    },
                    series: [{
                        name: '總公司',
                        data: yNum
                    }],
                    exporting:{
                        enabled:false
                    },
                    credits: {
                        enabled: false
                    }, 
                });
            }
        });
});
</script>
</body>
</html>

 


免責聲明!

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



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