Leaflet lapper.js和复杂多边形

Leaflet lapper.js和复杂多边形,leaflet,nominatim,Leaflet,Nominatim,对于一个小项目,我允许用户向数据库添加区域。他们的查询被发送到,我存储纬度和经度。如果可用,我还存储geoJSON多边形轮廓数据 示例输出: 然后,使用传单.js将该轮廓区域显示在地图上。对于许多多边形来说,这很好,但似乎库可以处理的数据量是有限的。一些需要在mysql中存储长文本的相当复杂的区域根本无法显示,并且不会抛出错误 我想我的问题有两部分: 1-我认为大型数据集是问题的根源,还是应该让lapper.js能够处理这些问题? 2-简化此类数据集的最佳方法是什么?传单有这样一种显示区域的算法

对于一个小项目,我允许用户向数据库添加区域。他们的查询被发送到,我存储纬度和经度。如果可用,我还存储geoJSON多边形轮廓数据

示例输出:

然后,使用传单.js将该轮廓区域显示在地图上。对于许多多边形来说,这很好,但似乎库可以处理的数据量是有限的。一些需要在mysql中存储长文本的相当复杂的区域根本无法显示,并且不会抛出错误

我想我的问题有两部分: 1-我认为大型数据集是问题的根源,还是应该让lapper.js能够处理这些问题? 2-简化此类数据集的最佳方法是什么?传单有这样一种显示区域的算法,但这似乎已经是失败的地方了

当我们讨论这个话题时:现在我正在将Namingm的lnglat多边形转换为传单的Latling,方法是将数据拆分并用javascript将其拼接在一起。有没有更简单/更安全的方法?我是否应该将该任务转移到服务器并使用一些php库/函数

我感谢你的帮助

编辑:忘记提及:在多边形无法渲染的情况下,我的控制台会给我以下错误:TypeError:t为null

大型数据集是问题的根源吗,还是应该让lapper.js能够处理这些问题

传单.js会处理你扔给它的任何东西。但是,您的web浏览器在不降低速度的情况下可以处理的内容是有限的

请记住,每个现代web浏览器都有性能分析工具,您可以使用这些工具查看传单代码或浏览器内部的哪些部分占用了您的大部分时间

简化此类数据集的最佳方法是什么

您可能想查看这些算法的起点

请记住,传单在内部使用此算法来简化每个缩放级别上的多边形,最多一个像素

对于一些大型复杂多边形,使用类似的方法将其切片可能会提高性能

然而,简化数据集并没有灵丹妙药。最佳方式取决于您使用的特定数据

在多边形无法渲染的情况下,我的控制台会给出以下错误:TypeError:t为null

这是另一回事,可能是数据格式错误的征兆


为了显示更漂亮的错误消息,请使用传单-src.js文件而不是传单.js文件。从传单1.0.0-beta2开始,传单-src.js有一个sourcemap,可以指向单个原始文件,以便更好地调试。

非常感谢。这是格式错误的数据——我编写的代码只需要一维多边形数据,这在很多情况下都有效,但不是所有情况下都有效。很可能没有发现在40K数据点的中间。还有一个关于-src.js的很好的提示-这肯定会派上用场。现在,我将为我的原型使用完整的数据集。一旦性能变得重要,我就必须回到简化上来。如果有疑问,用一个多边形和一个外圈将所有多边形规格化为多多边形。这将有助于将一维数组误解为多边形。