[英]MySQL 8.0: Create a polygon as a circle around a point
我想生成一個多邊形,這個圓形的半徑為10公里,圍繞MySQL中的一個定義點(沒有PHP或其他編程語言)。 該點作為具有經度緯度的地理坐標提供,例如曼谷市的“100.8160803 13.7538929”,SRID為4326。
多邊形不必是完美的圓形圓,六邊形或八邊形也可以。
試圖使用ST_Buffer,但這不起作用,因為它無法處理SRID(當然,除了SRID 0)。
我找到了很多關於如何在點周圍的某個半徑內定位點的教程/查詢,如下所示: MySQL - 從數據庫中查找半徑內的點
以下是此類查詢的代碼:
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)的矩形點將類似於xr yr, x+r yr, x+r y+r, xr y+r
然后使用空間索引(例如MBRContains
)來獲取候選點(快速),然后使用距離計算過濾出邊界矩形內的點,但不是圓圈中的點(慢,但只有少數幾個)考生)。
查看此答案以獲取更多詳細信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.