Get entities inside polygon

Draw polygon and get entities using WKT.

Draw a polygon and get entities clicking the buttons. You can list entities: region, subregion, municipality and localities.

<!DOCTYPE html>
<html>
  <head>
    <title>Get entities inside polygon</title>
    <script src="https://maps.cercalia.com/maps/loader.js?key=YOUR_API_KEY&v=5&lang=en&theme=1976d2"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <button id="draw">Draw polygon</button>
    <button id="getregions" value="region" disabled>Get regions</button>
    <button id="getsubregions" value="subregion" disabled>Get subregions</button>
    <button id="getmunicipalities" value="municipality" disabled>Get municipalities</button>
    <button id="getlocalities" value="locality" disabled>Get localities</button>
    <script>
      var map;
      var featureDrawn;
      var btnDraw, btnGetRegions, btnSubRegions, btnMunicipalities, btnLocalities;

      document.addEventListener('cercalia-ready', initMap);

      function initButtonEvents() {
        btnDraw = document.getElementById('draw');
        btnGetRegions = document.getElementById('getregions');
        btnSubRegions = document.getElementById('getsubregions');
        btnMunicipalities = document.getElementById('getmunicipalities');
        btnLocalities = document.getElementById('getlocalities');

        btnDraw.addEventListener('click', draw);
        btnGetRegions.addEventListener('click', getEntities);
        btnSubRegions.addEventListener('click', getEntities);
        btnMunicipalities.addEventListener('click', getEntities);
        btnLocalities.addEventListener('click', getEntities);
      }


      function initMap() {
        map = new cercalia.Map({
          target: 'map'
        });
        initButtonEvents();
      }


      function draw() {
        //register interaction draw
        map.enableDrawInteraction('Polygon', false, {}, drawEndCallback);

        //remove old feature
        if (featureDrawn) {
          map.removeFeatures(featureDrawn);
        }

        btnGetRegions.disabled = false;
        btnSubRegions.disabled = false;
        btnMunicipalities.disabled = false;
        btnLocalities.disabled = false;
      }


      function drawEndCallback(feature) {
        featureDrawn = feature;
        map.disableDrawInteraction();
      }

      function getEntities() {
        var titleInfoMap;
        var rqge;
        var wkt = featureDrawn.getWKT();

        if (this.value === 'region') {
          rqge = 'reg';
          titleInfoMap = 'Regions';
        } else if (this.value === 'subregion') {
          rqge = 'subreg';
          titleInfoMap = 'Subregions';
        } else if (this.value === 'municipality') {
          rqge = 'mun';
          titleInfoMap = 'Municipalities';
        } else if (this.value === 'locality') {
          rqge = 'ct';
          titleInfoMap = 'Localities';
        } else {
          alert('Unknown rqge =' + rqge);
          return;
        }

        var proximityService = new cercalia.service.Proximity({
          rqge: rqge,
          wkt: wkt
        });

        proximityService.proximity(function(data) {

          var notification;
          if (data.cercalia.error) {
            var error = data.cercalia.error;
            var errorMessage = 'Cercalia Error:' + error.id + ', type_id:' + error.type + ', value:' + error.value;
            notification = new cercalia.Notification(errorMessage, cercalia.Notification.Severity.ERROR);
            notification.display(map);
          } else if (data.cercalia  && data.cercalia.proximity && data.cercalia.proximity.gelist && data.cercalia.proximity.gelist.ge) {

            var entities = data.cercalia.proximity.gelist.ge;
            var content = '';
            for (var i = 0; i < entities.length; i++) {
              content += entities[i].name + '<br/>';
            }

            var infoMap = new cercalia.InfoMap({
              title: titleInfoMap,
              content: content
            });
            map.showInfoMap(infoMap);

          } else {
            notification = new cercalia.Notification('No candidates', cercalia.Notification.Severity.WARNING);
            notification.display(map);
          }

        });
      }
    </script>
  </body>
</html>