我知道在数据库中使用 PostGIS 很容易做到这一点,但我只希望我的积分最多能存活几分钟。
我想有一个生活 1-5 分钟的 GPS 点列表。当我添加一个新点时,我想从老化列表中计算新点半径 1-10 公里内的点列表。
还是建议在 PostGIS 或 Mongo 这样的数据库中执行这些操作?
如果不是,人们将如何在内存中计算这个?
您可以计算四键,它类似于四叉树,并且 bing 地图将其用于切片服务器。可以用莫顿曲线计算四键。你可以下载我的 php 类 hilbert-curve@phpclasses.org。
数据库非常慢,因为它们访问的磁盘内存很慢。
对于您的解决方案,您还需要地理空间数据库使用的索引技术(PostGis 或 Oracle-Spatial)。在您的情况下,您的索引保留在内存中:
它是一个(地理)空间索引。有四叉树和 R-Tree 作为最先进的技术。(有时也使用 kd-tree)四叉树更容易实现,R-Tree 可以比四叉树快两倍。我会使用四叉树。
您工作中最苛刻的部分是对一个点的删除操作。这很棘手,而且比插入要慢得多。
一种解决方案,由四叉树的原作者推荐,我会尝试:将点标记为已删除,但将它们保留在四叉树中。每 x 分钟重建整个四叉树,从旧的数据创建一个新的,但只保留仍然存在的点。
一旦点在四叉树中,范围搜索就减少到“附近”的点