【发布时间】:2017-07-30 09:07:54
【问题描述】:
我想知道是否有办法从空间数据列中查询最近的 N 个邻居,丢弃重复项。
例如,我的查询如下所示:
SELECT TOP (@N) Point.STDistance(@Point) AS Distance
FROM MyTable
WHERE Point.STDistance(@Point) IS NOT NULL --For Spatial Index usage
ORDER BY Distance;
它非常有效,但我的结果是:
Distance
3906,81969203873
3906,81969203873
5321,62614141754
5756,28719382942
我试图放置一个 DISTINCT 子句,但它没有使用空间索引。
有什么想法吗?
谢谢
【问题讨论】:
-
当您说丢弃重复项时,您是指重复点还是重复距离?两点之间的距离相同是完全可行的。如果您正在寻找独特点的列表,只需在
MyTable的过滤版本上运行您的top N。 -
假设重复的距离。我不能拥有
MyTable的过滤版本,因为它有数百万行 -
为什么不能过滤?除了空间点之外,您不保存纬度和经度值吗?或者除了空间点本身之外,还有关于该点所在位置的任何其他识别信息?
-
将此结果插入临时表,然后从临时表中选择
distinct行。 -
如果我将它插入到临时表中然后过滤,我将获得的行数将低于
@N
标签: sql-server spatial nearest-neighbor