javascript - 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);
}
}
}));
解决方案
您可以使用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
推荐阅读
- python - NoSuchModuleError:无法加载插件:sqlalchemy.dialects:snowflake
- powershell - Powershell 平衡数组元素
- mongodb - MongoDB 的索引和排序很慢
- python - 创建一个字谜检查器
- android - Android 应用程序中的 Kotlin 字节码
- c# - 在列表 C# 中查找最佳匹配实例的最佳实践
- jquery - jquery脚本执行顺序DataTables
- javascript - 滚动超过某个点后,使用 vanilla Javascript 更改 SVG 文件中 Id 的颜色
- dll - 在设计模式下打开特定窗体后只能编译 VB6 DLL
- format - KDB:如何将相对路径转换为绝对路径?