PostGIS
切換深色/淺色/自動模式 - PostGIS 空間資料庫 切換深色/淺色/自動模式 - PostGIS 空間資料庫 切換深色/淺色/自動模式 - PostGIS 空間資料庫 返回首頁 - PostGIS 空間資料庫

將 ST_DWithin 用於半徑查詢

對於涉及尋找「與其他事物距離 X 的事物」或「在距離 X 內沒有任何事物的」查詢,請使用 ST_DWithin 來篩選。不要使用 ST_DistanceST_Intersects 搭配 ST_Buffer

原因?

  1. ST_DWithin 會使用空間索引 (如有的話)。ST_Distance 沒有
  2. ST_DWithin 比使用 ST_Buffer 更精確,ST_Buffer 僅是對實際緩衝區輪廓的近似。它也幾乎總是比較快。

請注意,ST_DWithin 同時支援 geometrygeography 型別。

範例

我們展示了使用 geography 的範例。使用 geometry 的查詢類似,但距離必須使用空間參考單位。

尋找距離 1609 公尺 (~1 英里) 以內的項目

SELECT roads.road_name, pois.poi_name
 FROM roads INNER JOIN pois
   ON ST_DWithin(roads.geog, pois.geog, 1609);

尋找 1 英哩內沒有任何您感興趣道路

當找不到對應的資料時,我們使用一個事實,LEFT JOIN 會在左邊的資料表中傳回 NULL。

SELECT roads.road_name, pois.poi_name
 FROM roads LEFT JOIN pois
   ON ST_DWithin(roads.geog, pois.geog, 1609)
   WHERE pois.gid IS NULL;