Как ограничить результаты поиска до некоторой степени с помощью карты Esri Javascript?

Я считаю, что по умолчанию карта Esri Javascript 4.13 будет искать адреса по текущему экстенту представления карты. Проблема в том, что если пользователь увеличивает или уменьшает масштаб изображения слишком далеко, результаты поиска возвращают адреса ОЧЕНЬ далекие. Вот мой код:

function initESRIMap() {
require(["esri/Map", "esri/views/MapView", "esri/widgets/Search", "esri/layers/FeatureLayer", "esri/widgets/Popup", "esri/geometry/Extent", "esri/geometry/Geometry"], function (
  Map,
  MapView,
  Search,
  FeatureLayer,
  Popup,
  Extent,
  Geometry
) {      
  var esriMap = new Map({
    basemap: "streets",
  });

  var esriView = new MapView({
    container: "map-div",
    map: esriMap,
    center: LatLong,
    zoom: 11,
  });
  var search = new Search({
    view: esriView,
  });}

Я хочу иметь возможность получать такие же результаты поиска, НЕЗАВИСИМО от моего местоположения на карте. НО ограничивайте результаты определенной областью. Поэтому, если я просматриваю другую страну, я все равно буду видеть результаты поиска в моем масштабе.


person Scott Anderson    schedule 14.04.2021    source источник


Ответы (1)


Виджет поиска можно настроить для использования пользовательских источников, а в настраиваемом источнике можно настроить использование фильтра, который может включать экстент карты.

Например, давайте определим настраиваемый SearchSource - мы просто будем использовать ту же конечную точку поиска, что и стандартный сервис ArcGIS World Geocoder, но добавим фильтр:

const source = {
  locator: new Locator({
    url: "https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"
  }),
  filter: {
    geometry: new Extent({
      xmax: -12921954.804910611,
      xmin: -13126806.04071496,
      ymax: 3909898.0736186495,
      ymin: 3801204.619397087,
      spatialReference: {
        wkid: 102100
      }
    })
  },
  maxSuggestions: 10
};

Теперь, когда мы определяем наш виджет поиска, мы включим его в массив свойств source и отключим includeDefaultSources, чтобы исходный неограниченный источник не использовался:

const search = new Search({
  view,
  includeDefaultSources: false,
  sources: [source]
});

Рабочая среда кодов

В этом примере я установил экстент в фильтре вокруг области Сан-Диего / Тихуаны. Куда бы вы ни панорамировали или масштабировали карту, вы все равно будете получать результаты только из этой области. Например, переместите карту в Сиэтл, Китай или что-то еще и выполните поиск чего-то общего (парк, дорога, что угодно), и вы увидите, что независимо от размера карты результаты поиска будут ограничены что вы добавляете в фильтр источника поиска.

Обратите внимание, что этот ответ был написан с помощью 4.18.

person Seth Lutske    schedule 15.04.2021