我在这上面找了几个小时,终于找到了帮助。
我正在使用Azure地图创建地图。我已经创建了一个绘图区域选择工具。它在Azure演示中工作得很好,因为他们创建了一个名为'points‘的变量,然后只分配一些随机的功能和位置。但是..。我正在使用以下命令拉取数据:
datasource.importDataFromUrl(geoJsonFeed.url)我在头部设置了所有的JS和CSS (即核心Azure Maps JS/CSS和atlas-drawing.min.cs + atlas-drawing.min.js + turf.js)
我使用的主要参考是:https://azuremapscodesamples.azurewebsites.net/
演示和我的代码之间的主要区别是,他们创建了一个名为"points“的全局变量,并使用turf.js随机创建信息,然后将其绑定到BubbleLayer上。我使用importDataFromUrl (datasource.importDataFromUrl(geoJsonFeed.url))来拉取数据,并且,当我们有大量的点时,使用SymbolLayer (显然,它更适合于大型数据集)。我不知道图层类型对我下面的挑战是否有影响。
当选择一个多边形形状时,它会调用一个名为"function searchPolygon(searchArea) {“的函数。
这个函数似乎“知道”什么是“searchArea”。不知道是怎么回事。我已经在所有的JS中搜索了一些关于这一点的参考,但没有找到。不管怎样..。通过使用下面的代码,它“不知何故”知道var 'poly‘应该是什么:
var poly = searchArea.toJson();然后,我们想调用一个名为pointsWithinPolygon的turf.js函数:
var ptsWithin = turf.pointsWithinPolygon(points, poly);我的挑战是。我到底如何从我的数据中获得“点”的等价值?我什么都试过了。例如:
var points = pointLayer.getSource();
var points = pointLayer.getSource().shapesMap;
var points = datasource.getShapes().toJson();
var points = datasource.importDataFromUrl(geoJsonFeed.url)我看了一下:
var points = pointLayer.getSource();来自How to get all visible points in the map view bounds in Azure Maps
但它似乎并不共享pointsWithinPolygon正在寻找的函数的相同数据格式。
你可以在https://espiritos.projectwebdev.co.uk/index-v1.0.6a.html上看到代码。
我在function searchPolygon(searchArea)中添加了一个“调试器;”,这是主要的“点”问题所在……当您在点周围绘制一个框时,它会触发。
满怀希望。
发布于 2020-07-02 00:45:00
由于您是通过URL加载数据的,因此必须异步加载。因此,importDataFromUrl函数是一个承诺,一旦下载数据,您就可以监视并触发一个事件处理程序。在该事件处理程序中,您可以使用数据源toJson函数以GeoJSON格式获取点数据。
datasource.importDataFromUrl(geojsonFeed).then(() => {
points = datasource.toJson()
});或者,您可以在该示例的searchPolygon函数中调用数据源toJson函数,因为该点已经将点数据加载到数据源中。
我已经更新了以下代码示例,以使用GeoJSON文件使其更逼真。https://azuremapscodesamples.azurewebsites.net/Drawing%20Tools%20Module/Select%20data%20in%20drawn%20polygon%20area.html
https://stackoverflow.com/questions/62674558
复制相似问题