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
我正在使用 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