Esri Leaflet
This content has moved to developers.arcgis.com. Please update your bookmarks!

Search modes for searching within feature layers

Searches features layers for matching text in addition to geocoding. This demo relies on the Esri Leaflet Geocoder plugin.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Search modes for searching within feature layers</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.7.1/dist/leaflet.css"
    integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
    crossorigin=""/>
  <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
    integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
    crossorigin=""></script>

  <!-- Load Esri Leaflet from CDN -->
  <script src="https://unpkg.com/esri-leaflet@3.0.8/dist/esri-leaflet.js"
    integrity="sha512-E0DKVahIg0p1UHR2Kf9NX7x7TUewJb30mxkxEm2qOYTVJObgsAGpEol9F6iK6oefCbkJiA4/i6fnTHzM6H1kEA=="
    crossorigin=""></script>

  <!-- Load Esri Leaflet Geocoder from CDN -->
  <link rel="stylesheet" href="https://unpkg.com/esri-leaflet-geocoder@3.1.3/dist/esri-leaflet-geocoder.css"
    integrity="sha512-IM3Hs+feyi40yZhDH6kV8vQMg4Fh20s9OzInIIAc4nx7aMYMfo+IenRUekoYsHZqGkREUgx0VvlEsgm7nCDW9g=="
    crossorigin="">
  <script src="https://unpkg.com/esri-leaflet-geocoder@3.1.3/dist/esri-leaflet-geocoder.js"
    integrity="sha512-mwRt9Y/qhSlNH3VWCNNHrCwquLLU+dTbmMxVud/GcnbXfOKJ35sznUmt3yM39cMlHR2sHbV9ymIpIMDpKg4kKw=="
    crossorigin=""></script>

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

<style>
  #selectContainer {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 1000;
    background: white;
    padding: 1em;
  }

  #selectContainer select {
    font-size: 16px;
  }
</style>

<div id="map"></div>

<div id="selectContainer" class="leaflet-bar">
  <label>
    Search Mode:
    <select id="searchMode">
      <option value="contain">contain</option>
      <option value="startWith">startWith</option>
      <option value="endWith">endWith</option>
      <option value="strict">strict</option>
    </select>
  </label>
</div>

<script>
  var map = L.map('map').setView([40.91, -96.63], 4);

  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="https://osm.org/copyright">OpenStreetMap</a> contributors'
  }).addTo(map);

  // searchMode can be 'contain', 'startWith', 'endWith', or 'strict'
  var gisDayProvider = L.esri.Geocoding.featureLayerProvider({
    url: 'https://services.arcgis.com/BG6nSlhZSAWtExvp/ArcGIS/rest/services/GIS_Day_Registration_Form_2019_Hosted_View_Layer/FeatureServer/0',
    searchFields: ['event_name'],
    label: 'GIS Day Events 2019',
    formatSuggestion: function (feature) {
      return feature.properties.event_name;
    },
    searchMode: 'contain'
  });

  L.esri.Geocoding.geosearch({
    providers: [gisDayProvider]
  }).addTo(map);

  var searchMode = document.getElementById('searchMode');

  searchMode.addEventListener('change', function () {
    gisDayProvider.options.searchMode = searchMode.value;
  });
</script>

</body>
</html>