javascript - 动态 MySQL 查询以填充要在 MapBox GL-JS 中显示的 GeoJson 数据缓存

标签 javascript mysql mapbox geojson mapbox-gl-js

我有一个 MySQL 数据库,其中包含大约 10,000 个地理点。

我还有一个在网页上运行的 Mapbox GL-JS map ,该 map 执行查询以获取数据,将其转换为 GeoJSON,然后绘制点。 Mapbox 可以轻松处理所有点。

但是,查询所有点很慢,所以我只好限制查询说500个点。我想出了如何使用 MBRContains 仅请求边界框内的点。

但现在,每次我通过拖动或缩放更改 map 的边界框时,我都必须请求整个边界框,即使部分数据可能已知。我相信一定有一种更聪明的方法可以做到这一点,即制作某种缓存并仅查询新数据。

我应该怎么做?请求所有数据的成本很高,所以我不能这样做,然后将其处理成 R 树。这就是为什么我还没有看到如何使用 Mapbox 中的这个解决方案的原因:geojson vt .但是,我知道所有的 map 应用程序,可能还有 Angular 色扮演游戏都需要一个算法。

那么,我该如何动态请求和加载我的数据呢?

最佳答案

动态矢量切片

理想情况下,您需要一种机制来生成和提供矢量图 block ,Mapbox-GL-JS 可以使用它。然后,所有关于只获取正确数据、缓存等的需求都会自动得到满足。

我不能推荐特定的工具,但看起来 TileStache 的“vector”提供程序可以连接到 MySQL。

静态矢量瓦片

如果您的数据不经常更改(例如,每小时或每天),另一种方法是运行这样的批处理:

1. Dump data to GeoJSON
2. Use Tippecanoe to generate .mbtiles file
3. Serve .mbtiles file using something like Tessera.

合并 GeoJSON

使用您现有的堆栈,它似乎也不太复杂,可以简单地:

  • 获取初始数据集,将其存储为
  • 本地图移动时,获取新数据集,将其合并为
  • 使用 map.getSource().setData() 显示合并后的数据集。

不完全是标准方法,但如果您能找到一种简单的方法来进行合并,则可以使用。

关于javascript - 动态 MySQL 查询以填充要在 MapBox GL-JS 中显示的 GeoJson 数据缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50859984/

相关文章:

javascript - 无法使用 Javascript 或 JQuery trim 对象属性

php - 将 id 从一个表格带到另一个表格并插入另一个表格

php - mysql 从 5.5 升级到 5.7 后的空查询

java - 如何保持 gradle 依赖项 Intent 特定

javascript - 如何获取CurrentPosition并更新MapBox中心坐标

objective-c - Xcode 构建错误 clang 失败

javascript - 突变什么时候会成为副作用?

javascript - Ajax 请求当前路径请求 `text/html` 而不是 `application/json`

javascript - 如何将数组中的所有 onNext 值放在一起?

PHP MYSQL VALUE 变量