加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Postgresql earthdistance – 具有半径的earth_box

发布时间:2020-12-13 16:03:07 所属栏目:百科 来源:网络整理
导读:拜托,你能解释一下earth_box函数的这种行为……或者我做错了什么? 使用的数据 40.749276,-73.985643 = Empire State Building - is in my table40.689266,-74.044512 = Statue of Liberty - is my current position in select - 8324m far from Empire Stat
拜托,你能解释一下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,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

我现在的位置是距离帝国大厦800米以上的Libery雕像,但是
选择返回行,ID为1,即使半径仅为5558m!你能解释一下这种行为或出了什么问题吗?

=> SELECT id,title FROM requests WHERE earth_box(ll_to_earth(40.689266,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

谢谢
诺埃

解决方法

这里的问题是earth_box获得了Statute Miles.
8324.42998846164米附近有5.172560986623845法定里程
Unit Converter

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

earth_box(ll_to_earth(40.689266,5558 / 1.609)//不返回结果

earth_box(ll_to_earth(40.689266,9000 / 1.609)//确实.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读