使用sql server空间获取点半径内的点的最有效方法

发布于 2024-11-15 20:56:33 字数 365 浏览 3 评论 0原文

我正在尝试找出最有效的查询来获取给定点半径内的点。结果不必非常准确,因此我更看重速度而不是准确性。

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

WHERE v.GeoPoint.STDistance(@point) <= @radius

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

WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1

是首选这些查询还是还有另一个函数错过了?

I am trying to work out the most efficient query to get points within a radius of a given point. The results do not have to be very accurate so I would favor speed over accuracy.

We have tried using a where clause comparing distance of points using STDistance like this (where @point and v.GeoPoint are geography types):

WHERE v.GeoPoint.STDistance(@point) <= @radius

Also one using STIntersects similar to this:

WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1

Are either of these queries preferred or is there another function that I have missed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别忘他 2024-11-22 20:56:33

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

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

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

If accuracy is not paramount then using the Filter function might be a good idea:
http://msdn.microsoft.com/en-us/library/cc627367.aspx

This can i many cases be orders of magnitude faster because it does not do the check to see if your match was exact.
In the index the data is stored in a grid pattern, so how viable this approach is probably depends on your spatial index options.

Also, if you don't have to many matches then doing a filter first, and then doing a full intersect might be viable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文