0

我相信默认情况下,4.13 Esri Javascript 地图将按当前地图视图范围搜索地址。问题是如果用户放大或缩小得太远,搜索结果会返回非常远的地址。这是我的代码:

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,
  });}

无论我的地图视图位置如何,我都希望能够获得相同的搜索结果。但是将结果限制在特定区域。因此,如果我正在查看另一个国家/地区,我仍然会从我的范围内看到搜索结果。

4

1 回答 1

0

可以自定义搜索小部件以使用自定义,并且可以自定义自定义源以使用过滤器,该过滤器可以包括地图范围。

例如,让我们定义一个自定义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 编写的。

于 2021-04-15T21:31:40.473 回答