ArcGIS Javascript - 缩放以显示所有点

问题描述 投票:12回答:2

我正在尝试添加一些功能,这些功能将根据查询返回的点缩放地图。例如,假设我们放大了德克萨斯州。如果我执行查询并且服务返回德克萨斯州的一些点和一些位于加利福尼亚州的点,我希望地图然后缩小然后显示加利福尼亚州和德克萨斯州。我一直在浏览ArcGIS JS API,看看我是如何实现它的,但是我无法弄清楚用什么属性和/或方法来实现它。

javascript arcgis esri arcgis-js-api
2个回答
22
投票

提供给FeatureSetQueryTask回调的onComplete有属性features,这是Graphics阵列。

javascript api提供了esri.graphicsExtent(graphics)函数,它可以接受Graphics的数组并计算它们的范围。计算范围后,可以使用map.setExtent(extent)将地图缩放到该范围。

应该注意的是the documentationesri.graphicsExtent(...)指定'如果范围高度和宽度为0,则返回null。'如果返回的Graphics数组中只有一个点,则会发生这种情况,因此您需要检查它。

这是一个示例QueryTask onComplete回调,可用于将地图缩放到查询返回的点范围:

function onQueryComplete(returnedPointFeatureSet){
  var featureSet = returnedPointFeatureSet || {};
  var features = featureSet.features || [];

  var extent = esri.graphicsExtent(features); 
  if(!extent && features.length == 1) {
    // esri.getExtent returns null for a single point, so we'll build the extent by hand by subtracting/adding 1 to create x and y min/max values
    var point = features[0];
    extent = new esri.geometry.Extent(point.x - 1, point.y - 1, point.x + 1, point.y + 1, point.spatialReference);
  }

  if(extent) {
    // assumes the esri map object is stored in the globally-scoped variable 'map'
    map.setExtent(extent)
  }
}

5
投票

我同意,map.setExtent(extent, true)是去这里的方式。另一个观察:如果我们只有一个点,那么考虑简单地使用map.centerAndZoom(point, ZOOM_LEVEL)而不是创建一个范围是值得的。那么,我们可以这样:

function onQueryComplete(returnedPointFeatureSet){
  var featureSet = returnedPointFeatureSet || {};
  var features = featureSet.features || [];

  var extent = esri.graphicsExtent(features); 
  if(!extent && features.length == 1) {
     var point = features[0];
     map.centerAndZoom(point, 12);
  } 
  else {
     map.setExtent(extent, true);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.