2017-10-09 71 views
1

我有一個查詢,像這樣:試圖計算PostgreSQL中兩個lat-lng點之間的距離 - PostgreSQL earth_box(ll_to_earth)返回值的單位是什麼?

SELECT * FROM chat_rooms 
WHERE earth_box(ll_to_earth(5, 5), 111000) @> ll_to_earth(lat, lng); 

從本質上講,我在查詢有lat = lng = 5,在我chat_rooms表我有兩個入口,一個與lat=lng=5,其他與lat=lng=4。使用在線計算器時,這兩個條目之間的距離爲157英里= 252.667公里(即,在半徑> = 157英里時應返回條目lat=lng=4。但是,查詢僅在半徑指定爲〜111,000 +時返回條目lat=lng=4。我的問題是,什麼單位爲半徑,和我在正確進行此查詢?

回答

0

按照the doc,默認情況下,半徑以米爲單位。

最重要的缺陷是距離在4; 4和5之間; 5是157公里,而不是英里。儘管111,000米不等於157,000米,但文檔earth_box

此框中的某些點比距離指定的大圓 更遠,因此應在查詢中使用earth_distance 進行第二次檢查。

所以您的查詢應該是類似

SELECT * FROM chat_rooms 
WHERE earth_box(ll_to_earth(5, 5), 111000) @> ll_to_earth(lat, lng) 
AND earth_distance(ll_to_earth(5,5), ll_to_earth(lat, lng)) <= 111000 

在這種情況下,進入5; 5將不予退還,但如果您使用158000,而不是會。

相關問題