2014-09-23 3 views
0

사용자가 ArcGIS 온라인에서 웹 틱 애플리케이션으로 피쳐 레이어를 추가하려고하는 프로젝트에서 작업 중입니다. 사용자가 HTML 틱 박스를 통해 레이어를 켜고 끌 수있는 JavaScript API를 사용합니다. 레이어가 올바르게 가져오고 틱 박스를 건너 뛸 때 표시되지만 tickbox와 함께 사용할 수 있습니다. 내가 ArcGIS 샘플 등에서 코드를 해킹했기 때문에 내가 누락 된 작은 일이되어야합니다! 여기 ArcGIS Javascript API - addLayers

는 코드입니다 - 기본적으로 내가 원하는 모든 레이어가있는에 따라 일정한 기본지도 위에 ON과 OFF를 전환 할 수있는 사용자가 틱 체크 박스와

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples 
     on iOS devices--> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"> 
    <title>Select with feature layer</title> 
    <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/dojo/dijit/themes/tundra/tundra.css"> 
    <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/esri/css/esri.css"> 
    <style> 
     html, body, #mapDiv { 
     padding: 0; 
     margin: 0; 
     height: 100%; 
     } 
     #messages{ 
     background-color: #fff; 
     box-shadow: 0 0 5px #888; 
     font-size: 1.1em; 
     max-width: 15em; 
     padding: 0.5em; 
     position: absolute; 
     right: 20px; 
     top: 20px; 
     z-index: 40; 
     } 
    </style> 
    <script src="http://js.arcgis.com/3.10/"></script> 
    <script> 

     var map; 
     require([ 
     "esri/map", "esri/layers/FeatureLayer", 
     "esri/tasks/query", "esri/geometry/Circle", 
     "esri/graphic", "esri/InfoTemplate", "esri/symbols/SimpleMarkerSymbol", 
     "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol", "esri/renderers/SimpleRenderer", 
     "esri/config", "esri/Color", "dojo/dom", "dojo/domReady!", "dojo/on", "dojo/query", "dojo/domReady!", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/layers/ImageParameters", 
     ], function (
     Map, FeatureLayer, 
     Query, Circle, 
     Graphic, InfoTemplate, SimpleMarkerSymbol, 
     SimpleLineSymbol, SimpleFillSymbol, SimpleRenderer, 
     esriConfig, Color, dom, on, query, ArcGISDynamicMapServiceLayer, ImageParameters 
    ) { 
      // use a proxy page if a URL generated by this page is greater than 2000 characters 
      // 
      // this should not be needed as nearly all query & select functions are performed on the client 
      esriConfig.defaults.io.proxyUrl = "/proxy"; 

      map = new Map("mapDiv", { 
       basemap: "streets", 
       center: [-120.303130, 36.542750], 
       zoom: 5, 
       slider: false 
      }); 

      //add the census block points in on demand mode. Note that an info template has been defined so when 
      //selected features are clicked a popup window will appear displaying the content defined in the info template. 
      var Offices = new FeatureLayer("URL", { 
       infoTemplate: new InfoTemplate("Block: ${BLOCK}", "${*}"), 
       outFields: ["*"] 
      }); 

      var Northridge = new FeatureLayer("URL", { 
       infoTemplate: new InfoTemplate("Block: ${BLOCK}", "${*}"), 
       outFields: ["*"] 
      }); 

      var Associates = new FeatureLayer("URL", { 
       infoTemplate: new InfoTemplate("Block: ${BLOCK}", "${*}"), 
       outFields: ["*"] 
      }); 

      // selection symbol used to draw the selected census block points within the buffer polygon 
      var symbol = new SimpleMarkerSymbol(
      SimpleMarkerSymbol.STYLE_CIRCLE, 
      12, 
      new SimpleLineSymbol(
      SimpleLineSymbol.STYLE_NULL, 
      new Color([247, 34, 101, 0.9]), 
      1 
     ), 
      new Color([207, 34, 171, 0.5]) 
     ); 
      Offices.setSelectionSymbol(symbol); 

      //make unselected features invisible 
      var nullSymbol = new SimpleMarkerSymbol().setSize(10); 
      var RedCircle = new SimpleMarkerSymbol().setSize(8); 

      Offices.setRenderer(new SimpleRenderer(nullSymbol)); 

      on(dom.byId("layer0CheckBox"), "change", updateLayerVisibility); 
      on(dom.byId("layer1CheckBox"), "change", updateLayerVisibility); 
      on(dom.byId("layer2CheckBox"), "change", updateLayerVisibility); 

      function updateLayerVisibility() { 
       var inputs = query(".list_item"); 
       var inputCount = inputs.length; 
       //in this application layer 2 is always on. 
       visibleLayerIds = [2]; 

       for (var i = 0; i < inputCount; i++) { 
        if (inputs[i].checked) { 
         visibleLayerIds.push(inputs[i].value); 
        } 
       } 

       if (visibleLayerIds.length === 0) { 
        visibleLayerIds.push(-1); 
       } 

       map.addLayers(visibleLayerIds); 
      } 
     }); 

    </script> 
    </head> 

    <body> 
<br /> 
    <br /> 
     Layer List : <span id="layer_list"><input type='checkbox' class='list_item' id='layer0CheckBox' value="Northridge" />Earthquake 
      <input type='checkbox' class='list_item' id='layer1CheckBox' value="Offices" />Offices 
      <input type='checkbox' class='list_item' id='layer2CheckBox' value="Associates" />Associates 
     </span><br /> 
     <br /> 


    <div id="mapDiv"></div> 

    </body> 
</html> 

답변

0
  1. function updateLayerVisibility에서 map.addLayers 사용법이 잘못되었습니다. 배열 visibleLayerIds에 저장하지 않으면 특성 레이어, 그래픽 레이어, 동적 레이어 또는 타일 레이어를 추가해야합니다.

  2. ArcGISDynamicMapServiceLayer를 사용하면 보이는 레이어 ID를 제어 할 수 있습니다. 그런 다음 setVisibleLayers API를 사용하십시오. https://developers.arcgis.com/javascript/jsapi/arcgisdynamicmapservicelayer-amd.html

  3. FeatureLayer는 일반적으로 MapServer/2 또는 FeatureServer/2와 같은 서비스를 사용합니다.

관련 문제