Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArcGIS Javascript-缩放以显示所有点_Javascript_Arcgis_Esri_Arcgis Js Api - Fatal编程技术网

ArcGIS Javascript-缩放以显示所有点

ArcGIS Javascript-缩放以显示所有点,javascript,arcgis,esri,arcgis-js-api,Javascript,Arcgis,Esri,Arcgis Js Api,我试图添加一些功能,根据查询返回的点放大/缩小地图。比如说,我们放大了德克萨斯州。如果我执行一个查询,服务返回德克萨斯州和加利福尼亚州的点,我希望地图缩小,然后显示加利福尼亚州和德克萨斯州。我一直在查看如何实现它,但我很难弄清楚要使用哪些属性和/或方法来实现它。提供给QueryTask的onComplete回调函数的特性集具有一个图形 javascript api提供了esri.graphicsEvent(graphics)函数,该函数可以接受图形数组并计算其范围。计算完范围后,map.setE

我试图添加一些功能,根据查询返回的点放大/缩小地图。比如说,我们放大了德克萨斯州。如果我执行一个查询,服务返回德克萨斯州和加利福尼亚州的点,我希望地图缩小,然后显示加利福尼亚州和德克萨斯州。我一直在查看如何实现它,但我很难弄清楚要使用哪些属性和/或方法来实现它。

提供给
QueryTask
onComplete
回调函数的
特性集具有一个
图形

javascript api提供了esri.graphicsEvent(graphics)
函数,该函数可以接受
图形数组并计算其范围。计算完范围后,
map.setExtent(extent)
可用于将地图缩放到该范围

应该注意的是,对于
esri.GraphicsEvent(…)
指定“如果数据块高度和宽度为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)
  }
}

我同意,
map.setExtent(extent,true)
就是这个方法。另一个观察:如果我们只有一个点,那么只需考虑使用
map.centerAndZoom(点,缩放水平)
而不是创建范围。那么,我们就可以这样:

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

以这种方式从某个点创建数据块不是一个好主意。如果单位是度,你可以得到一个很大的范围。相反,可以使用几何引擎在点周围创建缓冲区

function onQueryComplete(featureSet){
  if (featureSet.features.length) {
    var extent = esri.graphicsUtils.graphicsExtent(featureSet.features); 
    if(!extent && featureSet.features.length == 1 && featureSet.features[0].geometry.type == "point") {
      var point = featureSet.features[0];
      var extent = esri.geometry.geometryEngine.buffer(point.geometry, 1, "meters").getExtent();
    }
    // assumes the esri map object is stored in the globally-scoped variable 'map'
    map.setExtent(extent)
  }
}

杰出的没有意识到esri有那些实用功能。另一个问题。使用您提供的信息,我可以更改范围。然而,由于某些点是分散的,它似乎放大了,但我看不到一些外部点。如果我稍微缩小,我就会看到它们。在设置地图上的范围之前,是否需要考虑偏移?地图可能正在根据磁贴缓存中的磁贴进行调整。如果是这样,那么
setExtent
函数将采用第二个(可选)布尔参数,当为true时,该参数将确保在地图上显示完整的范围。如果这不起作用,您可以使用
extent.expand(factor)
略微增加扩展的大小,然后再将其提供给setExtent方法。文档已经转移到不适合从这样的点创建扩展。如果单位是度,你可以得到一个很大的范围。相反,您可以使用geometryEngine在点周围进行缓冲,或者将贴图点转换为屏幕点,向范围添加1个像素,然后将其转换回贴图点