【问题标题】:How to process KML/GeoJSON in Nodejs?如何在 Nodejs 中处理 KML/GeoJSON?
【发布时间】:2016-05-30 05:42:54
【问题描述】:

我用完了谷歌搜索并在这里寻求帮助。我们现在正在客户端使用 geoXml3 处理 KML 文件。但理想情况下,我想在服务器端对其进行预处理并在客户端发送多边形。因为 KML 文件是 18MB 的文件,它需要永远在客户端下载,然后客户端解析它并在谷歌地图上绘制多边形。

我们将 KML 文件更改为 GeoJSON 并减小了大小,对其进行了压缩——毕竟马戏团的响应时间仍然不好。我只想知道节点中是否有方法/库可以做到这一点。

【问题讨论】:

  • 您是否在寻找将 kml 文件转换为 geojson 的库?
  • 是否需要为每个请求处理文件,还是在服务器端一次性处理?
  • @HeadCode 这是加载层的一次,每个请求我们都有 postgis
  • @Dario 不,不寻找到 GeoJSON 的 KML

标签: node.js npm gis kml geojson


【解决方案1】:

当你说你正在压缩文件时,你是什么意思?如果您指的是诸如 zip 或 lha 之类的算法,那不一定会大大减少文件的大小。您要做的是从 KML 文件中删除线段。在减少一些地理信息时,我发现有许多英里的长度与直线相差不到一英尺。由于数据点每隔几英尺间隔一次,这意味着可以删除 KML 文件中的绝大多数点,而不会显着改变几何的外观。寻找直线段相对简单。

您还应该记住您正在查看的地图的比例以及 KML 文件中数据点的间距。即使线条是复杂的曲线,也有可能通过尝试对特征的分段进行曲线拟合来去除大量点,并以这种方式减小数据的大小。

您似乎是在暗示,将数据从服务器下载到客户端比在服务器上处理数据花费的时间要多得多。如果这是正确的,减少点数是最有效的方法。

【讨论】:

  • 使用 gzip 压缩我们减少了点数,下载时间从 120 秒变为 15 秒。还是好像很慢!我认为没有任何解决方案
  • 可能没有简单的解决方案或普遍适用的解决方案。一种方法是使用 KML 文件绘制所有点并以不同的放大倍数查看。
【解决方案2】:

您可以尝试多种技巧来减少 KML 多边形文件的下载和渲染时间。

正如之前的答案中已经建议的那样,关键是减少数据的大小。这可以通过多种方式实现,具体取决于您的用例:

  • 减少每个线段/多边形边界组成的点数。这方面的算法有很多,Douglas-Peucker 行简化算法是最著名的。
  • 降低数据点的精度。如果您的坐标以高精度存储(即具有多个小数位的纬度/经度),那么您可以将它们四舍五入到较低的精度/更少的小数位。请注意,您可能不得不使用它,因为如果您走得太远,它会使多边形的边界变得不连贯/锯齿状。
  • 压缩。看起来您已经对此进行了实验。 Gzip 压缩应该能够显着减少 KML 的线路负载大小。
  • 最后,如果您仍然没有得到您想要的结果,您可以考虑通过删除小的/不重要的多边形来进一步概括您的数据。同样,这将取决于您的用例

【讨论】:

  • 感谢 Aengus,缩小后的文件现在为 1.6 MB。但仍然需要 15 秒才能加载,这从可用性方面来说有点令人沮丧
  • 是的,这仍然很慢。你有没有调查过 15s 的去向?例如网络,阅读,渲染。进一步的优化将取决于您尝试对客户端上的多边形做什么。你看过服务器端渲染吗?
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 2015-06-26
  • 2017-07-26
  • 2013-04-09
  • 2021-06-15
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
相关资源
最近更新 更多