【发布时间】:2012-10-24 00:58:54
【问题描述】:
假设我有一系列位置及其 X、Y 坐标:
L1(X1, Y1) L2(X2, Y2) L3(X3, Y3) ... L10000(X10000, Y10000)
我有一个函数可以返回两个位置之间的距离:distance(L1, L2) = 5 英里
对于给定位置,如何找到 100 英里内的所有位置?或者如果更简单,50 个最近的位置
我们的设置是一个包含位置及其邮政编码的 SQL Server 表。该函数采用 2 个邮政编码,查找每个邮政编码的纬度/经度并返回距离。我们可以缓存结果,因为它们不会经常更改。
【问题讨论】:
-
看到这个问题:stackoverflow.com/questions/1751698/…我没有时间断言这两个问题是否重复,但我相信你可以从旧问题中找到解决上述问题的好线索。
-
我认为您正在寻找的可能是 SQL Server 的spatial indexes。从算法上讲,在没有特殊索引支持的情况下,您几乎无法阻止此类查询的 O(n)(半径内的所有点)或 O(n lg k)(k 个最近点)时间。
-
使用空间索引(他们使用R-Tree's)
-
我在 mjv 的转介中找到了答案。我应该将什么标记为已接受?还是我应该将问题作为重复项删除?