我正在研究一个非常简单的问题,但找不到最佳解决方案。我需要接受纬度/经度坐标,并根据该坐标找到大约 1 公里内的所有点(准确性对我来说不太重要)。它也总是大约 1 公里的搜索(固定)。我现在面临如何将这些坐标存储在我的数据库中以及如何快速检索结果。我愿意使用任何数据库或语言来完成这项工作。
目前我正在使用 MongoDB 和 2D 空间索引(http://docs.mongodb.org/manual/applications/geospatial-indexes/)将我的位置存储为平面上的纬度/经度。然后我正在创建一个边界框(准确性对我来说不是很重要,所以我接受一个框,距离在所有方向上都不相同)并使用边界框搜索(http://docs.mongodb.org/manual /reference/operator/query/box/ ) 以获得所有分数。这种方法带来了不错的性能,但我正在寻找更快的速度。
我知道数据库真的很喜欢基于整数的索引。他们执行得最快。我正在寻找一种方法可以将坐标转换为整数或类似的东西?
我知道一些数据库(例如 MySQL 5.7)具有使用 r-trees 的空间索引,这对于大量地理空间操作非常有用,但我有一个我认为可以避免这些索引并利用更快的结构(例如本机整数等)的简单用例.
关于可以使用的算法的一些想法:z-order、hilbert、x-tree、geohash、kd-tree 等。
总结一下我的最终目标:
我想使用接受纬度/经度坐标并转换该坐标,然后最好将其存储在数据库中,以便在数据库上进行非常快速的附近搜索。我对任何方法持开放态度。
干杯