试图计算 PostgreSQL 中两个经纬度点之间的距离 - PostgreSQL earth_box(ll_to_earth) return 值的单位是什么?

Trying to calculate distance between two lat-lng points in PostgreSQL - what is the unit of PostgreSQL earth_box(ll_to_earth) return value?

我有这样的查询:

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

基本上,我在查询中有 lat = lng = 5,在我的 chat_rooms table 中,我有两个条目,一个 lat=lng=5,另一个 [=17] =].使用在线计算器,这两个条目之间的距离为 157 英里 = 252.667 公里(即当半径 >= 157 英里时应返回条目 lat=lng=4。但是,查询仅 returns 带有 [= 的条目17=] 当半径指定为 ~111,000+ 时。我的问题是,半径的单位是什么,我是否正确地执行了这个查询?

根据the doc,默认情况下,半径以米表示。

最重要的缺陷是 4;4 和 5;5 之间的距离是 157 公里,而不是英里。尽管 111,000m 与 157,000m 不同,但是 earth_box 的文档说

Some points in this box are further than the specified great circle distance from the location, so a second check using earth_distance should be included in the query.

所以您的查询应该类似于

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,则会返回。