Azure Maps(带有 Turf.js)- 无法从 SymbolLayer 获取 'points'
Azure Maps (with Turf.js) - can't get the 'points' from the SymbolLayer
我为此搜索了几个小时,终于寻求帮助。
我正在使用 Azure 地图创建地图。我创建了一个绘图区 select 工具。它在 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(显然它更适合大型数据集)。我不知道图层类型是否对我下面的挑战有任何影响。
当一个多边形形状被 selected 时,它会调用一个函数:"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();
来自
但它似乎并不共享 pointsWithinPolygon 正在寻找的函数的相同数据格式。
您可以在以下位置查看代码:https://espiritos.projectwebdev.co.uk/index-v1.0.6a.html
我添加了一个“调试器”;在 function searchPolygon(searchArea)
中,主要的 'points' 问题是...当您围绕一个点画一个框时触发。
很有希望。
由于您是通过 URL 加载数据,因此必须异步加载。因此,importDataFromUrl 函数是一个 Promise,您可以在下载数据后观看并触发事件处理程序。在该事件处理程序中,您可以使用数据源 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
我为此搜索了几个小时,终于寻求帮助。
我正在使用 Azure 地图创建地图。我创建了一个绘图区 select 工具。它在 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(显然它更适合大型数据集)。我不知道图层类型是否对我下面的挑战有任何影响。
当一个多边形形状被 selected 时,它会调用一个函数:"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();
来自
但它似乎并不共享 pointsWithinPolygon 正在寻找的函数的相同数据格式。
您可以在以下位置查看代码:https://espiritos.projectwebdev.co.uk/index-v1.0.6a.html
我添加了一个“调试器”;在 function searchPolygon(searchArea)
中,主要的 'points' 问题是...当您围绕一个点画一个框时触发。
很有希望。
由于您是通过 URL 加载数据,因此必须异步加载。因此,importDataFromUrl 函数是一个 Promise,您可以在下载数据后观看并触发事件处理程序。在该事件处理程序中,您可以使用数据源 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