將 ST_DWithin 用於半徑查詢
對於涉及尋找「與其他事物距離 X 的事物」或「在距離 X 內沒有任何事物的」查詢,請使用 ST_DWithin 來篩選。不要使用 ST_Distance 或 ST_Intersects 搭配 ST_Buffer。
原因?
ST_DWithin
會使用空間索引 (如有的話)。ST_Distance
沒有ST_DWithin
比使用ST_Buffer
更精確,ST_Buffer
僅是對實際緩衝區輪廓的近似。它也幾乎總是比較快。
請注意,ST_DWithin
同時支援 geometry
與 geography
型別。
我們展示了使用 geography
的範例。使用 geometry
的查詢類似,但距離必須使用空間參考單位。
SELECT roads.road_name, pois.poi_name
FROM roads INNER JOIN pois
ON ST_DWithin(roads.geog, pois.geog, 1609);
當找不到對應的資料時,我們使用一個事實,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;