Esri Leaflet

Identifying Features

Identifying features on a Dynamic Map Layer on click by querying the service. Click a feature to identify it. More information about Map Services can be found in the L.esri.DynamicMapLayer documentation.

Click on the map for Soil Order/ Sub-Order
<html>
<head>
  <meta charset=utf-8 />
  <title>Identifying Features</title>
  <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />


  <!-- Load Leaflet from CDN-->
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.1.0/dist/leaflet.css"
    integrity="sha512-wcw6ts8Anuw10Mzh9Ytw4pylW8+NAD4ch3lqm9lzAsTxg0GFeJgoAtxuCLREZSC5lUXdVyo/7yfsqFjQ4S+aKw=="
    crossorigin=""/>
  <script src="https://unpkg.com/leaflet@1.1.0/dist/leaflet-src.js"
    integrity="sha384-TWB9xRHTlLQmqAngHwD7usGcf4akGf0JP6aHwlgilpmOu2UuBq5aWLsDAh39iSn1"
    crossorigin=""></script>


  <!-- Load Esri Leaflet from CDN -->
  <script src="https://unpkg.com/esri-leaflet@2.0.8"
    integrity="sha384-ze7rgny7/YGFxBlVgTBdOABNWe5V9BYjju/qwqJhCU8XJHtuEnRlbUpN5lXyY706"
    crossorigin=""></script>


  <style>
    body { margin:0; padding:0; }
    #map { position: absolute; top:0; bottom:0; right:0; left:0; }
  </style>
</head>
<body>

<style>
  #selectedFeatures {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 1000;
    background: white;
    padding: 1em;
  }
  .leaflet-bar.map-text a {
    color: #79BD8F;
    display: inline;
  }
</style>

<div id="map"></div>
<div id="selectedFeatures" class="leaflet-bar map-text">Click on the map for Soil <a href="https://services.arcgisonline.com/arcgis/rest/services/Specialty/Soil_Survey_Map/MapServer">Order/ Sub-Order</a>
</div>
<script>
  var map = L.map('map', {
    minZoom: 5
  }).setView([38.5, -96.8], 6);
  L.esri.basemapLayer('Gray').addTo(map);

  var soil = L.esri.dynamicMapLayer({
    url: 'https://services.arcgisonline.com/arcgis/rest/services/Specialty/Soil_Survey_Map/MapServer',
    opacity: 0.7
  }).addTo(map);

  var identifiedFeature;
  var pane = document.getElementById('selectedFeatures');

  map.on('click', function (e) {
    pane.innerHTML = 'Loading';
    if (identifiedFeature){
      map.removeLayer(identifiedFeature);
    }
    soil.identify().on(map).at(e.latlng).run(function(error, featureCollection){
      // make sure at least one feature was identified.
      if (featureCollection.features.length > 0) {
        identifiedFeature = L.geoJSON(featureCollection.features[0]).addTo(map);
        var soilDescription =
          featureCollection.features[0].properties['Dominant Order'] +
          ' - ' +
          featureCollection.features[0].properties['Dominant Sub-Order'];
        pane.innerHTML = soilDescription;
      }
      else {
        pane.innerHTML = 'No features identified.';
      }
    });
  });
</script>

</body>
</html>