首页 > 解决方案 > ArcGIS JavaScipt API;检查当前可见的旧范围是否在新范围中

问题描述

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

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

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

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

}));

标签: javascriptarcgisarcgis-js-api

解决方案


您可以使用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


推荐阅读