试图计算 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,则会返回。
我有这样的查询:
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,则会返回。