如何在内存中计算给定半径内的GPS点的及时列表(Java)?

如何在内存中计算给定半径内的GPS点的及时列表(Java)?,java,mongodb,gps,gis,postgis,Java,Mongodb,Gps,Gis,Postgis,我知道在数据库中使用PostGIS很容易做到这一点,但我只希望我的积分最多能维持几分钟 我想有一个1-5分钟的GPS点列表。当我添加一个新点时,我想从旧列表中计算一个点列表,这些点位于新点的1-10km半径内 仍然建议在PostGIS或Mongo?之类的数据库中执行这些操作 如果没有,我们如何在内存中进行计算呢?数据库非常慢,因为它们访问的磁盘内存很慢 对于您的解决方案,您还需要Geo Spatial DBs使用的索引技术(PostGis或Oracle Spatial)。在您的情况下,索引将保留

我知道在数据库中使用PostGIS很容易做到这一点,但我只希望我的积分最多能维持几分钟

我想有一个1-5分钟的GPS点列表。当我添加一个新点时,我想从旧列表中计算一个点列表,这些点位于新点的1-10km半径内

仍然建议在PostGIS或Mongo?之类的数据库中执行这些操作


如果没有,我们如何在内存中进行计算呢?

数据库非常慢,因为它们访问的磁盘内存很慢

对于您的解决方案,您还需要Geo Spatial DBs使用的索引技术(PostGis或Oracle Spatial)。在您的情况下,索引将保留在内存中:

它是一个(地理)空间索引。 目前有四叉树和R-树。(有时也使用kd树) 四叉树更容易实现,R-树的速度是四叉树的两倍。 我会使用四叉树

工作中要求最高的部分是点的删除操作。 这很棘手,而且比插入慢得多

四叉树的原始作者推荐的一种解决方案,我会尝试:将点标记为已删除,但保留在四叉树中。 每x分钟重建整个四叉树,方法是从旧四叉树的数据创建一个新的四叉树,但只保留点仍然存在


一旦点位于四叉树中,范围搜索将仅限于“附近”的点。

您可以计算四叉键,它类似于四叉树,bing地图将其用于平铺服务器。四键可以用莫顿曲线计算。您可以下载我的php类hilbert curve@phpclasses.org。

有什么理由不使用PostGIS吗?@matthudson由于数据集非常动态,不需要持久化,在内存中这样做似乎是最好的option@b__如果我换个说法,我想应该没问题吧?如果有选择,我会将数据转储到PostGIS中并在那里进行操作/聚合。您会选择PostGIS而不是Mongo吗?谢谢Alex,但我的目标不是重新实现内存中的数据库。我想更多地关注GIS处理方面。这正是答案,四叉树本身与数据库无关。但是数据库使用这种索引,如果您想避免对所有点进行暴力搜索,您也必须使用这种索引。要么进行暴力搜索,要么使用空间索引。没有其他解决方案。谢谢,我一开始没有完全理解你的答案