Я использую API ArcGIS JavaScript для отображения карты ArcGIS в моем приложении. У меня также есть фильтры на моей странице, которые используются для создания определения запроса к серверу ArcGIS, для фильтрации показанных объектов. Когда эти фильтры применяются, карта масштабируется до экстента, применимого для текущего выбора, в соответствии с поисковыми фильтрами, которые я ввел.
Пользователи также иногда уже приближаются к некоторой части карты, а затем нажимают опции фильтра. Если другие объекты, кроме представления текущих пользователей, также согласны с фильтрами, карта масштабируется до вида, где все объекты, согласующиеся с фильтрами, снова видны.
В идеале я хотел бы проверить, прежде чем применять новый экстент для поисковых файлов, если текущий мент уже находится внутри (больше увеличен) в этом новом экстенте. Если это так, я не хотел бы, чтобы карта увеличивалась до большего экстента.
В настоящее время я использую приведенный ниже код, чтобы собрать все объекты, согласующиеся с фильтрами / запросами. Я прокомментировал (комментарий v1.5.0) часть 'setExtent' на данный момент, но в идеале я хотел бы проверить там, находится ли текущий экстент внутри этого нового экстента. Если это так, не увеличивайте / не используйте setExtent, если нет, то увеличивайте / используйте setExtent:
var qt = new esri.tasks.QueryTask(identifyTaskLayerURL);
qt.execute(q,lang.hitch(this, function(response) {
if (response && response.features){
for (var k = 0 ; k < response.features.length ; k++){
// extract needed content from QueryTask result
var geometry = response.features[k].geometry;
if (geometry){
centerLocation = this._getCenterCoordinates(geometry);
centerX = centerLocation.x.toFixed(5).toString();
centerY = centerLocation.y.toFixed(5).toString();
multiPoint.addPoint(new esri.geometry.Point(centerX,centerY));
} else{
console.log(this._logNode + "query gave empty result");
}
}
if (this._referenceMxObjectsArr.length == 1){
this._gisMap.centerAndZoom(centerLocation,Number(this._singleObjectZoom) - 1);
} else {
// set extent
this._extent = multiPoint.getExtent();
this._extent.setSpatialReference(this._gisMap.spatialReference);
// v1.5.0 disabled next line
//this._gisMap.setExtent(this._extent);
}
}
}));