簡體   English   中英

MySQL - 查看半徑是否與多邊形相交

[英]MySQL - See if a radius intersects a polygon

我有一個“區域”表,並且在該表中我有一個名為多邊形的字段來定義該區域。 這是多邊形中的數據示例

(51.562537549259275, -0.18651649218749844),(51.56518165749251, -0.1497333723210481),(51.55111270638887, -0.10924630850248862),(51.568708395618486, -0.12155901469758534),(51.51636175962405, -0.07797281013359303),(51.46339366897244, -0.1081939612190741),(51.45202948056895, -0.13394078643432783),(51.44657087249458, -0.14909693896627108),(51.43333085349518, -0.18476873548843198),(51.42143028245271, -0.16866370898437344),(51.42048689213698, -0.2246564608006274),(51.410609105933894, -0.2541484477524758),(51.38180048734274, -0.31050333075316905),(51.38632646897756, -0.3486097751090478),(51.4462317250533, -0.39531041838200887),(51.482412594272446, -0.33524472163053654),(51.49386310130167, -0.31459844345063326),(51.57115695855739, -0.25625859642894877),

這個多邊形是在谷歌地圖中創建的,如果將這些數據更改為不同的東西會有所幫助,我可以做到,我不會拘泥於這種數據格式。

在前端,客戶端通過選擇位置(給出緯度和經度)和要搜索的半徑來進行搜索。

MySQL 有沒有辦法查看這兩件事是否相交? 非常感謝任何幫助。

僅對於遇到此問題的任何人,我都找到了解決方案。

正如在最初的帖子中提到的,我有一個名為 polygon 的字段,它以同樣顯示的格式保存多邊形。 我創建了一個名為 enc_polygon 的 POLYGON 類型的新字段,並編寫了 PHP 以在插入和更新時將多邊形轉換為 enc_polygon。 我不會展示這一點,因為人們不太可能以與我使用的格式相同的格式保存!

值得一提的是,要使 POLYGON 數據庫字段工作,第一個和最后一個坐標必須相同,才能關閉它,對於谷歌地圖,它沒有。

現在我在數據庫中有多邊形我可以做到這一點

SELECT *
FROM   AREAS
WHERE ......
AND   ST_Within(ST_PointFromText('POINT($latitude $longitude)'), ST_Buffer(enc_polygon, 0.008983157 * $distance )) = 1

緯度和經度不是來自數據庫,所以我需要將它們轉換為點,這是使用ST_PointFromText

距離也會在頁面上輸入用戶願意走多遠的公里數。 所以我使用ST_Buffer function 在整個多邊形周圍放置一個輸入距離的緩沖區。

我認為ST_Within非常明顯,但如果該點位於緩沖多邊形內,它基本上返回 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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