Подтвердить что ты не робот

ArcGIS Javascript - Увеличить, чтобы показать все очки

Я пытаюсь добавить некоторые функции, которые будут увеличивать отображение карты в/из в зависимости от точек, возвращаемых из запроса. Например, скажем, мы увеличили штат штата Техас. Если я выполню запрос, и служба вернет обратно точки, которые находятся в Техасе, а некоторые из них расположены в Калифорнии, я бы хотел, чтобы карта затем уменьшилась, а затем отобразила как Калифорнию, так и Техас. Я просмотрел API-интерфейс ArcGIS JS, чтобы узнать, как я могу его реализовать, но у меня возникли проблемы с выяснением свойств и/или методов, используемых для этого.

4b9b3361

Ответ 1

FeatureSet, предоставленный QueryTask onComplete обратному вызову, имеет свойство features, которое представляет собой массив Graphics.

Javascript api предоставляет функцию esri.graphicsExtent(graphics), которая может принять этот массив Graphics и рассчитать их степень. После того, как степень была рассчитана, map.setExtent(extent) можно использовать для увеличения масштаба карты.

Следует отметить, что документация для esri.graphicsExtent(...) указывает, что" If высота и ширина экстента равны 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)
  }
}

Ответ 2

Я согласен, 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);
  }
}