我想在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"
但是我仍然不知道如何在点周围生成圆形多边形。
答案 0 :(得分:0)
如果目标是在某个点的距离内找到点,则不需要圆形多边形。空间索引使用边界矩形,因此不会使用更好的圆近似得到更好的索引。
而不是尝试制作一个多边形,而是制作一个矩形,其中包含圆形。点(x,y)的矩形点将类似于x-r y-r, x+r y-r, x+r y+r, x-r y+r
然后使用空间索引(例如MBRContains
)来获取候选点(快速),然后使用距离计算来过滤出边界矩形内但不在圆内的点(速度慢,但仅适用于少数候选人)。
查看this答案以了解更多详细信息。