ArcGIS Javascript-缩放以显示所有点
ArcGIS Javascript - Zoom to show all points
我正在尝试添加一些功能,根据查询返回的点放大/缩小地图。例如,假设我们放大了德克萨斯州。如果我执行查询,服务返回位于得克萨斯州和一些位于加利福尼亚州的返回点,我希望地图缩小,然后显示加利福尼亚州和得克萨斯州。我一直在浏览ArcGIS JS API以了解如何实现它,但我很难弄清楚使用什么属性和/或方法来实现它。
提供给QueryTask
的onComplete
回调的FeatureSet
具有属性features
,该属性是Graphics
的数组。
javascript api提供了esri.graphicsExtent(graphics)
函数,该函数可以接受Graphics
的数组并计算其范围。一旦计算出范围,就可以使用map.setExtent(extent)
将地图缩放到该范围。
需要注意的是,esri.graphicsExtent(...)
的文档指定"如果扩展区高度和宽度为0,则返回null。"如果返回的Graphics
数组中只有一个点,则会出现这种情况,因此您需要检查它
以下是一个示例QueryTask
onComplete
回调,可用于将地图缩放到查询返回的点的范围:
function onQueryComplete(returnedPointFeatureSet){
var featureSet = returnedPointFeatureSet || {};
var features = featureSet.features || [];
var extent = esri.graphicsExtent(features);
if(!extent && features.length == 1) {
// esri.getExtent returns null for a single point, so we'll build the extent by hand by subtracting/adding 1 to create x and y min/max values
var point = features[0];
extent = new esri.geometry.Extent(point.x - 1, point.y - 1, point.x + 1, point.y + 1, point.spatialReference);
}
if(extent) {
// assumes the esri map object is stored in the globally-scoped variable 'map'
map.setExtent(extent)
}
}
我同意,map.setExtent(extent, true)
是通往这里的道路。另一个观察结果:如果我们只有一个点,那么值得考虑简单地使用map.centerAndZoom(point, ZOOM_LEVEL)
,而不是创建一个范围。然后,我们可以有这个:
function onQueryComplete(returnedPointFeatureSet){
var featureSet = returnedPointFeatureSet || {};
var features = featureSet.features || [];
var extent = esri.graphicsExtent(features);
if(!extent && features.length == 1) {
var point = features[0];
map.centerAndZoom(point, 12);
}
else {
map.setExtent(extent, true);
}
}
以这种方式从一个点创建范围不是一个好主意。如果单位是度,你可以得到一个巨大的范围。相反,您可以使用几何引擎在该点周围进行缓冲
function onQueryComplete(featureSet){
if (featureSet.features.length) {
var extent = esri.graphicsUtils.graphicsExtent(featureSet.features);
if(!extent && featureSet.features.length == 1 && featureSet.features[0].geometry.type == "point") {
var point = featureSet.features[0];
var extent = esri.geometry.geometryEngine.buffer(point.geometry, 1, "meters").getExtent();
}
// assumes the esri map object is stored in the globally-scoped variable 'map'
map.setExtent(extent)
}
}
相关文章:
- 如果函数返回True,则显示Javascript按钮
- 背景图像前显示Javascript警报
- 为我的rails应用程序显示javascript弹出消息
- 如何在Javascript中显示Javascript变量
- 如何在colorbox中显示JavaScript变量
- Xamarin iOS WKWebView显示JavaScript警报
- GoogleMapsV3api只显示Javascript循环中的一些标记
- 如何在Asp.net标签控件中显示Javascript函数值
- 如何在对话框中显示javascript变量
- 在asp.net页面中显示javascript执行过程中的加载图标
- 在html中显示javascript变量won'不起作用
- 如何使用按钮在对话框上显示 Javascript 函数的结果
- 打开新窗口进行打印时不显示 JavaScript 图像
- 显示javascript控制台中的消息
- 在加载html网页时显示JavaScript表
- 在Notepad++中更好地突出显示Javascript语法
- 通过php显示javascript内容
- 文本字段未显示javascript函数中的变量
- 显示Javascript表单验证消息
- VB.NET-WebBrowser没有't在html源代码中显示javascript创建的html元素