2017-04-26 842 views
0

我有以下的表稱爲locations有以下欄目:POSTGIS查詢ST_DWithin對經/緯度值

  • latitude
  • longitude

現在我想查詢中所有條目在給定緯度/長點的特定半徑內。

SELECT * FROM locations 
WHERE ST_DWithin(
    ST_MakePoint(longitude, latitude), 
    ST_MakePoint(-0.63098, 51.18291), 
    100 
); 

上面的查詢解釋了我有哪些數據作爲輸入和我必須查詢的數據。

有什麼想法?

+0

你是什麼實際問題? - 如果他們是完全相同的點,則認爲*在另一點內*。你可以玩閾值,但使用['ST_Distance'](https://postgis.net/docs/ST_Distance.html)會更直接恕我直言。 – pozs

+0

問題是,上面的查詢返回表中的所有條目,而不僅僅是從輸入長/緯度座標的'100m'半徑內的條目。 'ST_Distance'只返回2個點之間的距離,我想實現的是從點 –

+0

返回一個特定半徑內的所有位置,這通常是一個WHERE ST_Distance(point_in_table,queried_point)查詢 pozs

回答

2

ST_DWithin可以同時處理地理和幾何類型。 ST_MakePoint返回一個幾何類型。當使用ST_DWithin時,它將使用由空間參考系統定義的距離單位。

當您想以米爲單位進行比較時,您首先必須將值轉換爲地理類型。查詢就變成了:

SELECT * FROM locations 
WHERE ST_DWithin(
    ST_MakePoint(longitude, latitude)::geography, 
    ST_MakePoint(-0.63098, 51.18291)::geography, 
    100 
); 

的回答解釋更多關於地理和幾何形狀之間的區別就在這裏:https://gis.stackexchange.com/questions/6681/what-are-the-pros-and-cons-of-postgis-geography-and-geometry-types

+0

這個伎倆。謝謝。 –