我有这样的查询:
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 +时。我的问题是,半径是什么单位,我是否正确地进行了这个查询?
答案 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则会返回。