获取与给定点周围的圆相交的所有多边形

时间:2012-09-20 12:16:48

标签: mysql spatial

我发现很多关于如何在MySQL中查找围绕某个位置(使用Haversine公式)绘制的圆圈中包含的所有POIN。

我的函数应该返回至少部分与圆相交的所有多边形。

  1. 如何创建该圈子?

  2. 如何检查多边形是否与该圆相交?

2 个答案:

答案 0 :(得分:2)

您忽略了提到您是否使用2D或3D工作。鉴于你说的是circle而不是sphere,我假设你的意思是2D。

要查找与圆相交的所有多边形,您需要知道:

a)每个多边形的原点(更具体地说,是多边形的中心)。

b)圆圈的起源。

c)圆的直径(或半径)。

使用这些值,您可以确定圆心和每个多边形中心之间的距离。如果圆的中心与多边形的中心之间的距离的大小小于圆的半径,则多边形相交。

我不太确定如何将其插入到SQL查询中,因为您首先需要计算每个多边形相对于圆的大小,然后根据圆的半径来评估它们。自从我写完SQL以来已经有一段时间了,但我想它会在以下几个方面:

  • 收集多边形中心与圆心之间距离大于半径的所有项目。

请参阅此便捷图片以进一步说明:

circle intersections

这只能提供一种非常粗略和基本的方法来确定交叉点,因为这不考虑复杂的形状。从本质上讲,这更像是球体与球体交叉的线条,其中边界球体将包含您的多边形。在某些情况下,它可能会提供误报,但您可以轻松地将这些结果传递给更细粒度的碰撞检测,以根据需要过滤掉结果。

希望有所帮助!

答案 1 :(得分:1)

这已经过时了,但在搜索此问题时,它仍然是谷歌最热门的点击之一。现有的答案没有用,因为它无法合理地实现在MySQL中使用 - 至少不能以任何具有远程可接受性能的方式实现。

解决方案是使用ST_Buffer和你的点/半径:

ST_Buffer(point, radius)

示例查询,对于包含包含多边形数据的列“polygon”的表,返回以半径为9的点mypoint为中心的圆相交的行:

SELECT * FROM mytable WHERE ST_Intersects(polygon, ST_Buffer(mypoint, 9))