Postgresql earthdistance - 具有半径的earth_box

Noe*_*Noe 5 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
Run Code Online (Sandbox Code Playgroud)

我的桌子

=> select id, latitude, longitude, title from requests;
 id | latitude  | longitude  |         title
----+-----------+------------+-----------------------
  1 | 40.749276 | -73.985643 | Empire State Building
Run Code Online (Sandbox Code Playgroud)

从帝国大厦到自由女神像的距离

=> 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
Run Code Online (Sandbox Code Playgroud)

我目前的位置是远离帝国大厦的距离超过8000米的Libery雕像,但是即使半径只有5558m,也选择id为1的返回行!你能解释一下这种行为或出了什么问题吗?

=> 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
Run Code Online (Sandbox Code Playgroud)

扩展和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
Run Code Online (Sandbox Code Playgroud)

谢谢你

Ump*_*mpa 8

这里的问题是earth_box获得了Statute Miles.8324.42998846164米附近5.172560986623845法定英里 单位转换器

解决方案:将半径转换为Statute Miles单位

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.

  • 此信息很难找到。每个人似乎都认为这需要仪表。转换为Statute Miles单位可获得更好的结果,但效果仍然不佳。8400 / 1.609应该已经返回帝国大厦,但是没有。我知道地球距离不应该是非常准确的,但也不应该那么遥远。也许还有更多呢? (2认同)