利用座標在指定半徑內搜尋建築物
處理地理資料時,通常需要尋找特定位置一定範圍內的物體。這對於諸如查找特定點一定半徑內的建築物等任務特別有用。在本文中,我們將重點放在尋找距離一組給定座標 5 英里範圍內所有建築物。
資料結構
我們的資料庫表名為“Building”,包含以下必要資訊:
挑戰
我們希望檢索落在特定點 5 英里半徑內的所有建築物,我們將使用一組給定座標來表示該點:
初步嘗試
為了搜尋所需範圍內的建築物,我們最初可能會考慮使用 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中文網其他相關文章!