Select to view content in your preferred language

In my html page i have add arcgis BasemapGallery and one operational layer (URL of my arcgis server services REST API) over the base map. now my query is i want to change the operational layer using the Combo-box drop-down which is open over the base m

3129
3
08-06-2015 10:15 PM
ChandanKori
New Contributor

In  my html page i have add arcgis BasemapGallery  and one operational layer (URL of my arcgis server services REST API) over the base map. now my query  is i want to change the operational layer using the Combo-box drop-down which is open over the base map on change event..

0 Kudos
3 Replies
RobertScheitlin__GISP
MVP Emeritus

Chandan,

  It would just be a matter of knowing the id of the operational layer so that you can use map.removeLayer(layerId); and then adding the selected layer using map.AddLayer.

Here is a sample:

<!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></title>

  <link rel="stylesheet" href="http://js.arcgis.com/3.14/dijit/themes/claro/claro.css">
  <link rel="stylesheet" href="http://js.arcgis.com/3.14/esri/css/esri.css">
  <style>
    html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
    #map{
      padding:0;
    }
  </style>

  <script src="http://js.arcgis.com/3.14/"></script>
  <script>
    var map;
    var layers = [];
    var handle;
    require([
      "dojo/on",
      "esri/map",
      "esri/dijit/BasemapGallery",
      "esri/arcgis/utils",
      "dojo/parser",
      "esri/layers/FeatureLayer",
      "dojo/store/Memory",
      "esri/dijit/util/busyIndicator",
      "dijit/layout/BorderContainer",
      "dijit/layout/ContentPane",
      "dijit/TitlePane",
      "dijit/form/ComboBox",
      "dojo/domReady!"
    ], function(
      on,
      Map,
      BasemapGallery,
      arcgisUtils,
      parser,
      FeatureLayer,
      Memory,
      busyIndicator
    ) {
      parser.parse();

      map = new Map("mapDiv", {
        basemap: "topo",
        center: [-105.255, 40.022],
        zoom: 5
      });

      //add the basemap gallery, in this case we'll display maps from ArcGIS.com including bing maps
      var basemapGallery = new BasemapGallery({
        showArcGISBasemaps: true,
        map: map
      }, "basemapGallery");
      basemapGallery.startup();

      basemapGallery.on("error", function(msg) {
        console.log("basemap gallery error:  ", msg);
      });

      var TimeZone = new FeatureLayer("http://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer/1", {
        id: "OperationalLayer",
        mode: FeatureLayer.MODE_SNAPSHOT,
        outFields: ["*"]
      });
      layers.push(TimeZone);

      var Regions = new FeatureLayer("http://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer/2", {
        id: "OperationalLayer",
        mode: FeatureLayer.MODE_SNAPSHOT,
        outFields: ["*"]
      });
      layers.push(Regions);

      handle = busyIndicator.create(mapDiv);

      var store2 = new Memory({data:[]});
      dijit.byId("opLayerSelect").set('store',store2);
      var data = [];
      data.push({id:0, name:"World Time Zones", layer:"TimeZone"});
      data.push({id:1, name:"World Regions", layer:"Regions"});
      store2 = new Memory({data:data});
      dijit.byId("opLayerSelect").set('store',store2);
      dijit.byId("opLayerSelect").set('value', data[0].name);
      dijit.byId("opLayerSelect").item = dijit.byId("opLayerSelect").store.query({name:"World Time Zones"})[0];

      app = {
        changeOpLyr: function(){
          var store = dijit.byId("opLayerSelect").store;
          var cbSelVal = dijit.byId("opLayerSelect").get('value');
          var layerIndx = store.query({name:cbSelVal})[0]["id"];
          if(map.getLayer("OperationalLayer")){
            map.removeLayer(map.getLayer("OperationalLayer"));
          }
          handle.show();
          map.addLayer(layers[layerIndx]);
          var lyrEvt = on(layers[layerIndx], "update-end", function(){
            handle.hide();
            lyrEvt.remove();
          });
        }
      }
    });
  </script>
</head>

<body class="claro">
  <div data-dojo-type="dijit/layout/BorderContainer"
       data-dojo-props="design:'headline', gutters:false"
       style="width:100%;height:100%;margin:0;">

    <div id="header" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'" style="overflow:hidden;border:none;border-bottom: 3px solid #CC9900;font-family: Windows;font-size:14pt; color: #FFFFFF;background: #000000; "> Select Operational Layer:
      <input id="opLayerSelect" data-dojo-type="dijit/form/ComboBox"  onchange="app.changeOpLyr()" data-dojo-props="maxHeight: 200, searchAttr:'name'" />
    </div>

    <div id="mapDiv"
         data-dojo-type="dijit/layout/ContentPane"
         data-dojo-props="region:'center'"
         style="padding:0;">

      <div style="position:absolute; right:20px; top:10px; z-Index:999;">
        <div data-dojo-type="dijit/TitlePane"
             data-dojo-props="title:'Switch Basemap', closable:false, open:false">
          <div data-dojo-type="dijit/layout/ContentPane" style="width:380px; height:280px; overflow:auto;">
            <div id="basemapGallery"></div>
          </div>
        </div>
      </div>

    </div>
  </div>
</body>

</html>
0 Kudos
ChandanKori
New Contributor
Thanks

0 Kudos
RobertScheitlin__GISP
MVP Emeritus

Chandan,

   Yes you can use your own URL from your ArcGIS Server.

0 Kudos