试图计算PostgreSQL中两个lat-lng点之间的距离 - PostgreSQL earth_box(ll_to_earth)返回值的单位是多少?

时间:2017-10-09 22:12:21

标签: sql postgresql distance geography earthdistance

我有这样的查询:

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.667km(即当半径> = 157英里时应返回条目lat=lng=4。但是,查询仅返回lat=lng=4条目当半径指定为~111,000 +时。我的问题是,半径是什么单位,我是否正确地进行了这个查询?

1 个答案:

答案 0 :(得分:1)

根据the doc,默认情况下,半径以米为单位。

最重要的缺陷是4; 4和5之间的距离; 5是157公里,而不是英里。尽管如此,111,000m与157,000m不同,但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则会返回。