使用sql server spatial获取点的半径范围内的点的最有效方法

Luk*_*rey 6 spatial spatial-query sql-server-2008

我正在尝试找出最有效的查询,以获得给定点半径内的点.结果不一定非常准确,所以我赞成速度超过准确性.

我们尝试使用where子句比较使用STDistance的点的距离,如下所示(其中@point和v.GeoPoint是地理类型):

WHERE v.GeoPoint.STDistance(@point) <= @radius
Run Code Online (Sandbox Code Playgroud)

还有一个使用与此类似的STIntersects:

WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1
Run Code Online (Sandbox Code Playgroud)

这些查询中的任何一个是首选还是我错过了另一个功能?

Tom*_*mas 4

如果准确性不是最重要的,那么使用 Filter 函数可能是一个好主意: http://msdn.microsoft.com/en-us/library/cc627367.aspx

在许多情况下,这可以快几个数量级,因为它不会检查您的匹配是否准确。在索引中,数据以网格模式存储,因此这种方法的可行性可能取决于您的空间索引选项。

另外,如果您不需要很多匹配,那么首先进行过滤,然后进行完全相交可能是可行的。