簡體   English   中英

MySQL 8.0:創建一個多邊形作為點周圍的圓

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM