MySQL 8.0:将多边形创建为围绕点的圆

时间:2019-05-14 21:19:54

标签: mysql geometry geospatial

我想在MySQL中(没有PHP或其他编程语言)围绕定义的点生成一个半径为10公里的多边形。该点作为具有经纬度的地理坐标提供,例如曼谷市为“ 100.8160803 13.7538929”,SRID为4326。

多边形不必是完美的圆形,六角形或八边形也可以。

试图使用 ST_Buffer ,但这不能工作,因为它不能处理SRID(当然,除了SRID 0之外)。

我发现了许多关于如何在点周围一定半径内定位点的教程/查询,例如:MySQL - Find points within radius from database

这是进行此类查询的代码:

SELECT id, 
( 6371 * 
    ACOS( 
        COS( RADIANS( db_latitude ) ) * 
        COS( RADIANS( $user_latitude ) ) * 
        COS( RADIANS( $user_longitude ) - 
        RADIANS( db_longitude ) ) + 
        SIN( RADIANS( db_latitude ) ) * 
        SIN( RADIANS( $user_latitude) ) 
    ) 
) 
AS distance FROM the_table HAVING distance <= $the_radius ORDER BY distance ASC"

但是我仍然不知道如何在点周围生成圆形多边形

1 个答案:

答案 0 :(得分:0)

如果目标是在某个点的距离内找到点,则不需要圆形多边形。空间索引使用边界矩形,因此不会使用更好的圆近似得到更好的索引。

而不是尝试制作一个多边形,而是制作一个矩形,其中包含圆形。点(x,y)的矩形点将类似于x-r y-r, x+r y-r, x+r y+r, x-r y+r

然后使用空间索引(例如MBRContains)来获取候选点(快速),然后使用距离计算来过滤出边界矩形内但不在圆内的点(速度慢,但仅适用于少数候选人)。

查看this答案以了解更多详细信息。