首頁 >資料庫 >mysql教程 >如何使用緯度和經度座標來尋找 5 英里半徑內的建築物?

如何使用緯度和經度座標來尋找 5 英里半徑內的建築物?

Barbara Streisand
Barbara Streisand原創
2025-01-09 11:51:42540瀏覽

How to Find Buildings Within a 5-Mile Radius Using Latitude and Longitude Coordinates?

利用座標在指定半徑內搜尋建築物

處理地理資料時,通常需要尋找特定位置一定範圍內的物體。這對於諸如查找特定點一定半徑內的建築物等任務特別有用。在本文中,我們將重點放在尋找距離一組給定座標 5 英里範圍內所有建築物。

資料結構

我們的資料庫表名為“Building”,包含以下必要資訊:

  • name:建築物名稱
  • lat:緯度座標
  • lng:經度座標

挑戰

我們希望檢索落在特定點 5 英里半徑內的所有建築物,我們將使用一組給定座標來表示該點:

  • -84.38653999999998(經度)
  • 33.72024(緯度)

初步嘗試

為了搜尋所需範圍內的建築物,我們最初可能會考慮使用 ST_Contains 函數。但是,只有在我們將座標儲存為單一幾何圖形時,這種方法才適用。由於我們使用的是單獨的緯度和經度列,因此 ST_Contains 無法直接應用。

相反,我們可以利用另外兩個函數來執行基於點的地理空間計算:ST_DWithin 和 ST_Distance。讓我們分別探討一下它們。

1. ST_DWithin

ST_DWithin 允許我們檢查幾何圖形是否在另一個幾何圖形的指定距離內。以下是我們在這種情況下如何使用它的範例:

<code class="language-sql">SELECT name,
       long,
       lat,
       ST_Distance('POINT(-84.38653999999998, 33.72024)'::geography,
                   ST_MakePoint(long, lat)) * 0.000621371 AS distance
FROM building
WHERE
  ST_DWithin('POINT(-84.38653999999998, 33.72024)'::geography,
              ST_MakePoint(long, lat), 8046.72); -- 8046.72 米 = 5 英里</code>

2. ST_Distance

ST_Distance 計算兩個幾何圖形之間的距離(以公尺為單位)。我們可以用它來查找 5 英里範圍內的所有建築物,然後將距離轉換為英里:

<code class="language-sql">SELECT name,
       long,
       lat,
       ST_Distance('POINT(-84.38653999999998, 33.72024)'::geography,
                   ST_MakePoint(long, lat)) * 0.000621371 AS distance
FROM building
WHERE
  ST_Distance('POINT(-84.38653999999998, 33.72024)'::geography,
              ST_MakePoint(long, lat)) * 0.000621371 < 5;</code>

請注意,建構 ST_Point 幾何圖形時參數的順序至關重要。第一個參數表示經度,第二個參數表示緯度。

執行這兩個查詢中的任何一個時,您都應該獲得所需的結果:建築物名稱、經度、緯度和距指定坐標的距離列表,過濾後僅包含5 英里半徑內的那些建築物。

以上是如何使用緯度和經度座標來尋找 5 英里半徑內的建築物?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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