2014-08-29 52 views
3

請你能解釋我earth_box函數的這種行爲......或者我做錯了什麼?Postgresql earthdistance - 與半徑的earth_box

數據使用

40.749276, -73.985643 = Empire State Building - is in my table 
40.689266, -74.044512 = Statue of Liberty - is my current position in select - 8324m far from Empire State Building 

我的表從帝國大廈的雕像

=> select id, latitude, longitude, title from requests; 
id | latitude | longitude |   title 
----+-----------+------------+----------------------- 
    1 | 40.749276 | -73.985643 | Empire State Building 

距離自由女神

=> SELECT id, latitude, longitude, title, earth_distance(ll_to_earth(40.689266, -74.044512), ll_to_earth(latitude, longitude)) as distance_from_current_location FROM requests ORDER BY distance_from_current_location ASC; 
id | latitude | longitude |   title   | distance_from_current_location 
----+-----------+------------+-----------------------+-------------------------------- 
    1 | 40.749276 | -73.985643 | Empire State Building |    8324.42998846164 

我現在的位置是Libery雕像比8000米更遠離帝國州Buildng,但 選擇返回行機智h id 1即使半徑僅爲5558m!你能解釋我這種行爲或者什麼是錯的?

=> SELECT id,latitude,longitude,title FROM requests WHERE earth_box(ll_to_earth(40.689266, -74.044512), 5558) @> ll_to_earth(requests.latitude, requests.longitude); 
id | latitude | longitude |   title 
----+-----------+------------+----------------------- 
    1 | 40.749276 | -73.985643 | Empire State Building 

版本的擴展和PostgreSQL

=> \dx 
            List of installed extensions 
     Name  | Version | Schema |       Description 
---------------+---------+------------+-------------------------------------------------------------- cube   | 1.0  | public  | data type for multidimensional 
cubes earthdistance | 1.0  | public  | calculate great-circle 
distances on the surface of the Earth plpgsql  | 1.0  | 
pg_catalog | PL/pgSQL procedural language 

=> select version(); 
                   version 
-------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 9.4beta2 on x86_64-apple-darwin13.3.0, compiled by Apple 
LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn), 64-bit 

感謝你 NOE

回答

5

這裏的問題是,earth_box得到法定英里。 8324.42998846164米接近5.172560986623845法定英里 Unit Converter

解決辦法:半徑轉換爲法定英里單位

earth_box(ll_to_earth(40.689266, -74.044512), 5558/1.609) //doesn't return results

earth_box(ll_to_earth(40.689266, -74.044512), 9000/1.609) //does.