【问题标题】:What data structure should I use to index geographic coordinates?我应该使用什么数据结构来索引地理坐标?
【发布时间】:2019-10-12 10:53:04
【问题描述】:

我有一组具有纬度和经度坐标的对象,我需要能够将另一组对象与最近的项目相匹配。简单的最近邻的东西。我最好的想法是将 lat/lng 坐标转换为 3D 坐标,然后存储在 K-d 树或八叉树中以供以后查找。它应该可以工作并且对于所有实际目的都足够好(请参阅:kdtree for geospatial point search),但对此感觉有些不对劲。我认为这是它实际上只是 3D 空间中的 2D 流形的部分。

是否有更合适的结构可以使用,还是我只是想多了?

【问题讨论】:

  • 我不明白您为什么要在存储到任一结构之前将纬度/经度转换为 3D 坐标。他们的 2D 等价物肯定就足够了吗?
  • 两个问题: 1. 经线之间的距离在高纬度压缩,沿一个轴扭曲距离。 2. 线不能穿过坐标系中的接缝,因此可以认为它们之间的距离比实际距离更远。例如180 度经度两侧的两个点在该轴上被认为相距最远,尽管实际上很近。
  • 在这种情况下,从 测地线网格 开始,并以此构建您的数据结构。但是(a)我怀疑这样做的复杂性将大于使用最初用于平面应用的结构来处理您概述的问题,并且(b)我从您的评论中推测您的观点基本上是随机分布在脸上的它们不是地球上的,因为代表(例如)火车站的点不会是 - 这些都不会出现在高纬度地区。

标签: data-structures geospatial


【解决方案1】:

连维基百科都说:

k-d 树(k-dimensional tree 的缩写)是一种空间划分数据结构,用于在 k-维 空间中组织点。

所以继续使用您的 2D 点(将它们投影到 3D,或类似的东西)。

将它们插入树中,然后以对数时间查询树 - 就这样,一切顺利!

【讨论】:

  • 不幸的是,这有缺陷。有关详细信息,请参阅问题上的 cmets。
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 2011-12-12
  • 2011-10-24
  • 1970-01-01
  • 2013-04-17
  • 2018-10-28
  • 1970-01-01
相关资源
最近更新 更多