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

Mysql 获取与给定点周围的圆相交的所有多边形,mysql,spatial,Mysql,Spatial,我发现了很多关于如何在MySQL中找到围绕某个位置绘制的圆中包含的所有点(使用Haversine公式) 我的函数应该返回至少与圆部分相交的所有多边形 如何创建该圆 如何检查多边形是否与该圆相交 你忘了提到你的工作是2D还是3D。既然你说的是圆而不是球体,我想你指的是2D 要查找与圆相交的所有多边形,您需要知道: a) 每个多边形的原点(更具体地说,是多边形的中心) b) 圆的原点 c) 圆的直径(或半径) 使用这些值,可以确定圆心与每个多边形中心之间的距离。如果圆心和多边形中心之间的距离的大小小

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

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

  • 如何创建该圆

  • 如何检查多边形是否与该圆相交


  • 你忘了提到你的工作是2D还是3D。既然你说的是圆而不是球体,我想你指的是2D

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

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

    b) 圆的原点

    c) 圆的直径(或半径)

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

    我不太确定如何将其插入SQL查询,因为首先需要计算每个多边形相对于圆的大小,然后根据圆的半径对其进行评估。我已经有一段时间没有编写SQL和SQL了,但我想它应该是沿着以下路线的某个地方:

    • 聚集多边形中心与圆心之间的距离大于半径的所有项目
    有关更多说明,请参见此方便的图像:

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


    希望有帮助

    你忘了提到你的工作是2D还是3D。既然你说的是圆而不是球体,我想你指的是2D

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

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

    b) 圆的原点

    c) 圆的直径(或半径)

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

    我不太确定如何将其插入SQL查询,因为首先需要计算每个多边形相对于圆的大小,然后根据圆的半径对其进行评估。我已经有一段时间没有编写SQL和SQL了,但我想它应该是沿着以下路线的某个地方:

    • 聚集多边形中心与圆心之间的距离大于半径的所有项目
    有关更多说明,请参见此方便的图像:

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


    希望有帮助

    这本书很古老,但它仍然是谷歌搜索这本书时最热门的点击量之一。现有的答案是没有用的,因为它不能合理地实现在MySQL中使用——至少不能以任何具有远程可接受性能的方式实现

    解决方案是在点/半径上使用ST_缓冲区:

    ST_Buffer(point, radius)
    
    对于包含包含多边形数据的列“polygon”的表,返回圆心位于点mypoint且半径为9的圆相交的行的示例查询:

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

    这是一个很老的问题,但它仍然是谷歌搜索这一问题时点击率最高的问题之一。现有的答案是没有用的,因为它不能合理地实现在MySQL中使用——至少不能以任何具有远程可接受性能的方式实现

    解决方案是在点/半径上使用ST_缓冲区:

    ST_Buffer(point, radius)
    
    对于包含包含多边形数据的列“polygon”的表,返回圆心位于点mypoint且半径为9的圆相交的行的示例查询:

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