javascript - 从 ArcGIS Online 中的 KML 图层获取范围

标签 javascript kml arcgis arcgis-js-api

有没有办法使用 ArcGIS Online 中的 KMLLayer({ url: "my file"}) 方法计算从网络加载的 KML 图层的范围?从 AGOL 加载的 KML 具有有效的 fullExtent 属性,但从其他来源加载的 KML 似乎默认为整个世界,这没有用。

这是一个例子:

app.kml=new KMLLayer({ url: "my file" });                                                                                    
app.map.add(app.kml);                                                                                                    
app.kml.load().then(function() { app.mapView.extent=app.kml.fullExtent; console.log(app.kml) });

直播地址:

http://viseyes.org/visualeyes/test.htm?kml=https://www.arcgis.com/sharing/rest/content/items/a8efe6f4c12b462ebedc550de8c73e22/data

控制台打印出KMLLayer对象,并且fullExtent字段似乎没有设置正确。

最佳答案

我同意,fullExtent 属性似乎不是您所期望的。我认为有两种解决方法:

编写一些代码来查询layerView以获取范围:

view.whenLayerView(kmlLayer).then(function(layerView) {
  watchUtils.whenFalseOnce(layerView, "updating", function() {
    var kmlFullExtent = queryExtent(layerView);
    view.goTo(kmlFullExtent);
  });
});

function queryExtent(layerView) {
  var polygons = layerView.allVisiblePolygons;
  var lines = layerView.allVisiblePolylines;
  var points = layerView.allVisiblePoints;
  var images = layerView.allVisibleMapImages;

  var kmlFullExtent = polygons
    .concat(lines)
    .concat(points)
    .concat(images)
    .map(
      graphic => (graphic.extent ? graphic.extent : graphic.geometry.extent)
    )
    .reduce((previous, current) => previous.union(current));
  return kmlFullExtent;
}

示例 here .

-- 或 --

再次调用实用程序服务并使用“lookAtExtent”属性:

view.whenLayerView(kmlLayer).then(function(layerView) {
  watchUtils.whenFalseOnce(layerView, "updating", function() {
    // Query the arcgis utility and use the "lookAtExtent" property -
    esriRequest('https://utility.arcgis.com/sharing/kml?url=' + kmlLayer.url).then((response) => {
      console.log('response', response.data.lookAtExtent);
      view.goTo(new Extent(response.data.lookAtExtent));
    });

  });
});

示例 here .

关于javascript - 从 ArcGIS Online 中的 KML 图层获取范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57463495/

相关文章:

javascript - Django Admin 弹出功能

javascript - 在此ajax表单中将加载图标放在哪里请有人告诉我吗?

python - 在 Python 中从 csv 创建 kml

mysql - 带 Cast 或 Convert 的 SQLWhere 子句不起作用

javascript - jquery: 如果 (target) 是 ('.wrapper' 的 child ) then (do something)

javascript - JavaScript 中返回错误的 ASCII 代码

Ruby:KML 库?

node.js - Nodejs 的 KML 生成器/格式化程序

ios - 如何在应用增加边界宽度的自定义渲染时保留 ArcGIS map 中填充的颜色

javascript - 为什么需要 if(0) 和 if(1)