ArcGIS JavaScript API;检查当前可见的旧 Extent 是否在新 Extent 中

ArcGIS JavaScipt API; check if old Extent currently visible is in new Extent

我正在使用 ArcGIS JavaScript API 在我的应用程序中显示 ArcGIS 地图。我的页面上也有过滤器,用于创建 ArcGIS 服务器的查询定义,以过滤显示的对象。应用这些过滤器后,地图会缩放到适用于当前选择的范围,同意我输入的搜索过滤器。

用户有时也已经放大了地图的某些部分,然后点击过滤器选项。如果当前用户视图之外的更多对象也同意过滤器,地图将缩小到同意过滤器的所有对象再次可见的视图。

理想情况下,在为搜索文件管理器应用新范围之前,我想检查当前事件是否已经在这个新范围内(放大更多)。如果是这样,我不希望地图缩放到更大的范围。

目前我使用下面的代码来收集所有同意 filters/query 的对象。我现在评论(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);
        }
    }                   

}));

您可以使用范围几何的 contains 方法来检查,像这样的东西应该有效,

this._extent = multiPoint.getExtent();
this._extent.setSpatialReference(this._gisMap.spatialReference);
if (!mapExtent.contains(this._extent) {
  this._gisMap.setExtent(this._extent);
}

获取当前范围取决于您使用的 API 版本。

使用 API 4.x 您需要使用地图视图,mapView.extent

使用API 3.x需要用到地图,map.extent