ArcGIS Javascript - 缩放以显示所有点

Joh*_* F. 12 javascript esri arcgis arcgis-js-api

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

shr*_*rds 22

FeatureSet提供给QueryTaskonComplete回调具有这样的特性features即阵列Graphics.

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

应该注意的是,文档esri.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)
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 地图可以基于图块缓存中​​的图块进行调整.如果是这样,`setExtent`函数接受第二个(可选的)布尔arg,当true为保证在地图上显示完整范围时.如果不能解决这个问题,在将它提供给setExtent方法之前,可以使用`extent.expand(factor)`稍微增加范围的大小. (4认同)

ADi*_*3ek 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);
  }
}
Run Code Online (Sandbox Code Playgroud)