2016-02-23 31 views
0

數據庫表中有兩個字段,緯度經度。 (其他領域也一樣,但他們現在並不重要。)PostgreSQL查詢中的地理座標

我有一個函數,其中有三個參數:緯度經度MAX_DISTANCE(公里)。

是否有任何方法來構造原始PostgreSQL查詢,該查詢僅返回表示位於距離給定的經度和緯度的max_distance(km)內的位置的行?

示例參數緯度= 59.9138699,經度= 10.7522451,MAX_DISTANCE = 10

+0

[mySQL經度和緯度查詢x英里半徑內其他行的可能重複](http://stackoverflow.com/questions/8994718/mysql-longitude-and-latitude-query-for-other-rows-within -x-mile-radius) –

+0

也許使用距離運算符:http://www.postgresql.org/docs/current/static/functions-geometry.html#FUNCTIONS-GEOMETRY-OP-TABLE如果你需要這麼多,可能應該考慮PostGIS –

回答

0

爲此,使用PostGIS的。

POSTGIS具有以下功能:ST_DistanceST_PointFromText

select * from tbl 
where ST_Distance(
    ST_PointFromText('POINT(' || longitude || ' ' || latitude || ')', 4326), 
    ST_PointFromText('POINT(10.7522451 59.9138699)', 4326) 
) < 10000; 

要做到這一點快,你應該使用幾何領域並建立索引。


您還應該瞭解一下空間參照系和SRID。 SRID 4326表示WGS84座標系統,通常在網絡上使用。