mongodb如何在内存中计算给定半径内的GPS点的及时列表(Java)?
我知道在数据库中使用PostGIS很容易做到这一点,但我只希望我的积分最多能维持几分钟
我想有一个1-5分钟的GPS点列表。当我添加一个新点时,我想从旧列表中计算一个点列表,这些点位于新点的1-10km半径内
仍然建议在PostGIS或Mongo?之类的数据库中执行这些操作
如果不是,人们将如何在内存中进行计算
你可以在下面搜索框中键入要查询的问题!
我知道在数据库中使用PostGIS很容易做到这一点,但我只希望我的积分最多能维持几分钟
我想有一个1-5分钟的GPS点列表。当我添加一个新点时,我想从旧列表中计算一个点列表,这些点位于新点的1-10km半径内
仍然建议在PostGIS或Mongo?之类的数据库中执行这些操作
如果不是,人们将如何在内存中进行计算
# 1 楼答案
你可以计算一个四叉键,它类似于一个四叉树,bing地图将其用于tile服务器。四键可以用莫顿曲线计算。你可以下载我的php类hilbert curve@phpclasses。组织
# 2 楼答案
数据库速度非常慢,因为它们访问的磁盘内存速度很慢
对于您的解决方案,您还需要Geo Spatial DBs使用的索引技术(PostGis或Oracle Spatial)。在您的情况下,索引将保留在内存中:
这是一个(地理)空间索引。 目前有四叉树和R-树。(有时也使用kd树) 四叉树更容易实现,R-树的速度是四叉树的两倍。 我会用四叉树
工作中要求最高的部分是点的删除操作。 这很棘手,而且比插入要慢得多
四叉树的原始作者推荐了一种解决方案,我会尝试:将点标记为已删除,但保留在四叉树中。 Evry x minutes重建整个四叉树,方法是根据旧四叉树的数据创建一个新的四叉树,但只保持点仍然存在
一旦点位于四叉树中,范围搜索将仅限于“附近”的点