根据位置和指定的半径获取数据

时间:2012-08-08 11:24:52

标签: node.js database-design graph geolocation

场景:我有一个大型数据集,每个条目都包含一个位置(x,y - 坐标)。 我希望能够从此数据集中请求此数据集中100米范围内的每个条目,并将其作为数组返回。

如何实施这样的事情?是否有推荐的模式或框架?我之前只使用过关系或简单的键值类型数据。

2 个答案:

答案 0 :(得分:2)

有效解决此问题的数据结构是k-d tree。有许多可用的实现,包括node.js module

答案 1 :(得分:1)

将您的数据集放入PostgreSQL并使用R-Tree索引。然后,您可以执行边界框查询以获得所有位置+ -100英里的所有点。然后计算径向距离并接受100英里内的点数。您可以滚动自己的架构和查询,也可以使用PostGIS。

与R-Trees不同,KD树本身并不平衡。因此,根据KD树的构建方式,由于不平衡的树和最长的路径,您可能会获得不一致的性能。