我有一个mysql数据库,里面有大约10000个地理点。
我还有一个mapbox gl js map在一个网页上运行,它通过查询获取数据,将数据转换成geojson,然后绘制点。mapbox处理所有点都没有问题。
但是,查询所有点的速度很慢,所以我不得不将查询限制为500点。我知道了如何使用mbracontains只请求边界框内的点。
但是现在,每次我通过拖动或缩放更改Map的边界框时,我都必须请求整个边界框,即使部分数据可能已经已知。我确信一定有一种更聪明的方法来做到这一点,通过制作某种缓存,只查询新数据。
我该怎么做?请求所有的数据是昂贵的,所以我不能这样做,然后处理成一个r-树。这就是为什么我还不知道如何从mapbox:geojson-vt使用这个解决方案的原因。然而,我知道所有的Map应用程序,可能还有rpg都需要一个算法来实现这一点。
那么,如何动态请求和加载数据呢?
1条答案
按热度按时间oo7oh9g91#
动态矢量分幅
理想情况下,您需要一种机制来生成和服务矢量图块,mapboxgljs可以使用这种机制。然后,所有关于只获取正确数据、缓存等的需求都会自动得到满足。
我不能推荐一个特定的工具,但是看起来tilestache的“vector”提供者可以连接到mysql。
静态矢量图块
如果您的数据不经常更改(例如,每小时或每天),另一种方法是运行如下批处理过程:
合并geojsons
使用现有的堆栈,简单地执行以下操作似乎也不太复杂:
获取初始数据集,将其存储为
points
当Map移动时,获取新的数据集,将其合并到points
使用map.getSource().setData()
显示合并的数据集。不完全是一个标准的方法,但可以工作,如果你能找到一个简单的方法来做合并。