【发布时间】:2013-09-27 03:36:16
【问题描述】:
我有一个数据集,目前只存储在一个 JSON 文件中,其中包含大约 40k 个不同的地理位置。它看起来像这样:
[
{"title": "Place 1", "loc": {"x": "00.000", "y": "00.00000"}},
{"title": "Place 2", "loc": {"x": "00.000", "y": "00.00000"}},
]
一个地方的loc 就是它的坐标。
我希望能够对此数据运行查询,因此对于任何给定用户输入的loc,我可以获得n 最近的地点。
或者换句话说,我想写一些函数f,这样它就可以工作了:
def f(loc, n): ...
f({"x": "5", "y": "5"}, 3) #=> [{"title": "Place 1", "distance": 7.073}, {"title": "Place 2": "distance": 7.073}, {"title": "Place 3", "distance": 7.073}]
如果在{x: 0, y: 0} 有地点 1、2 和 3。
我不知道解决此类问题的标准方法是什么。使用带有预先计算距离索引的 SQL DB 不起作用,因为提供的 loc 是任意的。遍历整个数据库并计算所有内容的距离太低效,也太慢了。 (我需要
唯一有意义的解决方案是以某种方式制作近距离位置的“桶”(在彼此的一些 r 内),然后计算用户给定的 loc 和桶的 loc 之间的距离以缩小范围选项第一。但是我觉得自己创建这样的解决方案就像根本不使用数据库一样;必须有更有效/行业标准的方法。有吗?
【问题讨论】:
-
Postgres(带有 PostGIS 扩展)对这种类型的查询有很好的支持。
标签: json database algorithm database-design geolocation