gpt4 book ai didi

MySQL 8.0 : Create a polygon as a circle around a point

转载 作者:可可西里 更新时间:2023-11-01 08:57:58 25 4
gpt4 key购买 nike

我想在 MySQL 中生成一个半径为 10 公里的圆形多边形(无需 PHP 或其他编程语言)。该点以包含经纬度的地理坐标形式提供,例如“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"

但我仍然不知道如何围绕一个点生成圆形多边形

最佳答案

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

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

然后使用空间索引(例如MBRContains)得到候选点(快速),然后使用距离计算过滤掉边界矩形内的点,但不在边界矩形内的点圈子(慢,但只有少数候选人)。

检查 this回答更多详情。

关于MySQL 8.0 : Create a polygon as a circle around a point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56138774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com