我有个疑问是这样的:

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)。但是,当半径指定为~111000+时,查询只返回带有lat=lng=4的条目。我的问题是,半径是什么单位,我是否正确地执行了这个查询?

最佳答案

根据the doc,默认情况下,半径以米表示。
最重要的缺陷是4;4和5;5之间的距离是157公里,而不是英里。尽管111000m与15700m不同,但是
此框中的某些点比指定的大圆更远
与位置的距离,因此使用地球距离进行第二次检查
应该包含在查询中。
所以你的查询应该类似于

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

关于sql - 尝试计算PostgreSQL中两个lat-lng点之间的距离-PostgreSQL earth_box(ll_to_earth)返回值的单位是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46655745/

10-13 03:45