试图计算PostgreSQL中两个lat-lng点之间的距离 - PostgreSQL earth_box(ll_to_earth)返回值的单位是什么?
问题描述:
我有一个查询,像这样:试图计算PostgreSQL中两个lat-lng点之间的距离 - PostgreSQL earth_box(ll_to_earth)返回值的单位是什么?
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.667公里(即,在半径> = 157英里时应返回条目lat=lng=4
。但是,查询仅在半径指定为〜111,000 +时返回条目lat=lng=4
。我的问题是,什么单位为半径,和我在正确进行此查询?
答
按照the doc,默认情况下,半径以米为单位。
最重要的缺陷是距离在4; 4和5之间; 5是157公里,而不是英里。尽管111,000米不等于157,000米,但文档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,而不是会。