组织地理参考数据的最佳方式是啥?
Posted
技术标签:
【中文标题】组织地理参考数据的最佳方式是啥?【英文标题】:What is the best way to organise geo-referenced data?组织地理参考数据的最佳方式是什么? 【发布时间】:2013-08-29 07:09:07 【问题描述】:我有几个位置,每个位置都有纬度和经度,我需要找到离给定点最近的位置。我可以使用核心位置来查找从该点到该位置的距离,但我的算法效率非常低(仅枚举每个位置,计算距离并跟踪最小值)。在几个点上工作得很好,但当你达到 100,000 点时,事情就开始吱吱作响了。
组织数据的最佳方法是什么,以便我可以快速确定离给定点最近的位置以及给定位置是否在指定矩形内?
我了解游戏玩家使用树结构来进行快速碰撞测试,但我是树结构的新手,想知道如何开始? ios 中是否有任何合适的树结构,或者我必须自己构建?
提前致谢。
【问题讨论】:
【参考方案1】:我会使用一种Quadtree。在网格中组织您的地图,并增加单元格大小。 如果您寻找附近的点,请查看网格中具有最小单元格的相邻单元格,如果找不到,请在下一个较粗的网格中搜索相邻单元格。
这并不完美,因为网格始终引用Manhatten distance,但您可以获得最近点的良好候选者。对于每个候选人,您都可以计算出您感兴趣的实际距离。
【讨论】:
抱歉这个愚蠢的问题,但是 iOS SDK 中是否有四叉树的实现,或者你必须手动切割? 在这里找到了一个四叉树的实现erikolsson.me/articles/quadtrees-in-objective-c【参考方案2】:如果您不需要在创建后更改结构并希望将其全部保存在内存中,我建议k-d tree。它简单快速,但在第一次批量加载后添加新元素会使其不平衡并降低性能。
如果您想要高效地添加和删除元素、支持多边形元素或将树结构保留在磁盘上,R-tree 的一些变体会更好。
【讨论】:
抱歉这个愚蠢的问题,iOS SDK 中是否有这些类型的树的实现,或者您必须手动切割?以上是关于组织地理参考数据的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章