首頁 > 資料庫 > mysql教程 > 如何有效率地找到給定點 5 英里範圍內的所有建築物?

如何有效率地找到給定點 5 英里範圍內的所有建築物?

Mary-Kate Olsen
發布: 2025-01-09 11:56:46
原創
158 人瀏覽過

How Can I Efficiently Find All Buildings Within 5 Miles of a Given Point?

最佳化空間查詢:高效率找出5英哩範圍內所有建築物

本文探討一個常見空間問題:從給定座標點檢索指定半徑範圍內的所有建築物。 直接使用ST_CONTAINS函數可能效率不高,因此本文將探索更優的解決方案。

資料表示的重要性

在深入技術細節之前,必須強調正確資料表示的重要性。將地理空間資料儲存為單獨的經度和緯度列,會在查詢操作中導致效率低。為此,強烈建議使用geometrygeography資料類型,它們將兩個座標封裝在一個欄位中。

利用ST_DWithin高效進行鄰近查詢

ST_DWithin是一個強大的函數,可以直接檢查兩個幾何圖形是否在指定的距離內。 透過將搜尋半徑轉換為米,並將其與使用ST_DWithin計算的距離進行比較,我們可以有效地識別所需範圍內的建築物。

<code class="language-sql">SELECT name, long, lat
FROM building
WHERE ST_DWithin(
  ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
  ST_POINT(long, lat),
  8046.72
);
-- 8046.72 米 = 5 英里</code>
登入後複製

使用ST_Distance處理轉換後的英哩距離

或者,可以使用ST_Distance計算幾何圖形之間的距離。輸出結果最初以米為單位,但我們可以使用簡單的乘法因子將其轉換為英里:

<code class="language-sql">SELECT name, long, lat,
  ST_Distance(
    ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
    ST_POINT(long, lat)
  ) * 0.000621371 AS distance
FROM building
WHERE distance < 5;</code>
登入後複製

注意: 使用ST_Distance時,必須透過使用索引來有效率地處理空間查詢。雖然ST_Distance本身不支援索引,但在ST_GEOMETRY上建立空間索引可以優化整體查詢效能。

總結

透過探索替代方法並強調資料表示最佳化,我們展示了高效檢索指定範圍內的建築物的方法。本文提出的技術為實際應用中的空間查詢提供了可擴展性和效能改進。

以上是如何有效率地找到給定點 5 英里範圍內的所有建築物?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板