首頁  >  文章  >  資料庫  >  如何在資料庫中有效執行地理空間資料的半徑搜尋?

如何在資料庫中有效執行地理空間資料的半徑搜尋?

Linda Hamilton
Linda Hamilton原創
2024-11-01 01:13:28658瀏覽

How can I efficiently perform radius searches in a database for geospatial data?

用於地理空間半徑搜尋的資料庫查詢

在這種情況下,我們的目標是識別位置落在由標記表示的定義半徑區域內的個人地圖。

半徑計算

要確定點(x, y) 是否位於以(x1, y1) 為中心、半徑為r 的圓內,我們採用以下公式:

(x - x1)^2 (y - y1)^2

度數到公里的轉換

為了保證等式兩邊單位一致,我們使用轉換係數111.12 公里/度將經緯度轉換為公里。

修改公式

應用轉換後,修改後的公式變成:

((x - x1) * 111.12)^2 (( y - y1) * 111.12)^2

其中4 代表2 公里的平方半徑。

SQL 實作

為了在MySQL 中實現此公式,我們建立一個將每個標記配對的查詢(用戶A )與待定位用戶(用戶B)的中心點:

<code class="sql">SELECT A.user_id, A.radius_id, A.latitude, A.longitude
FROM UserA AS A
JOIN (SELECT user_id, latitude, longitude FROM UserB WHERE user_id = 8) AS B
ON (POW((A.latitude - B.latitude) * 111.12, 2) + POW((A.longitude - B.longitude) * 111.12, 2)) <= 4</code>

精度增強

為了獲得更精確的結果,可以將公式修改為考慮相對於緯度的經緯度差異:

((x - x1) * 111.12 * cos(B.latitude))^2 ((y - y1) * 111.12)^2

或相對於經度:

((x - x1) * 111.12 * cos(A.latitude))^2 ((y - y1) * 111.12)^2 < ;= 4

以上是如何在資料庫中有效執行地理空間資料的半徑搜尋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn