我发现很多关于如何在MySQL中查找围绕某个位置(使用Haversine公式)绘制的圆圈中包含的所有POIN。
我的函数应该返回至少部分与圆相交的所有多边形。
如何创建该圈子?
如何检查多边形是否与该圆相交?
答案 0 :(得分:2)
您忽略了提到您是否使用2D或3D工作。鉴于你说的是circle
而不是sphere
,我假设你的意思是2D。
要查找与圆相交的所有多边形,您需要知道:
a)每个多边形的原点(更具体地说,是多边形的中心)。
b)圆圈的起源。
c)圆的直径(或半径)。
使用这些值,您可以确定圆心和每个多边形中心之间的距离。如果圆的中心与多边形的中心之间的距离的大小小于圆的半径,则多边形相交。
我不太确定如何将其插入到SQL查询中,因为您首先需要计算每个多边形相对于圆的大小,然后根据圆的半径来评估它们。自从我写完SQL以来已经有一段时间了,但我想它会在以下几个方面:
请参阅此便捷图片以进一步说明:
这只能提供一种非常粗略和基本的方法来确定交叉点,因为这不考虑复杂的形状。从本质上讲,这更像是球体与球体交叉的线条,其中边界球体将包含您的多边形。在某些情况下,它可能会提供误报,但您可以轻松地将这些结果传递给更细粒度的碰撞检测,以根据需要过滤掉结果。
希望有所帮助!
答案 1 :(得分:1)
这已经过时了,但在搜索此问题时,它仍然是谷歌最热门的点击之一。现有的答案没有用,因为它无法合理地实现在MySQL中使用 - 至少不能以任何具有远程可接受性能的方式实现。
解决方案是使用ST_Buffer和你的点/半径:
ST_Buffer(point, radius)
示例查询,对于包含包含多边形数据的列“polygon”的表,返回以半径为9的点mypoint为中心的圆相交的行:
SELECT * FROM mytable WHERE ST_Intersects(polygon, ST_Buffer(mypoint, 9))