使用MongoDB进行错误的距离计算

时间:2013-10-21 14:12:04

标签: mongodb distance geospatial

我正在使用MongoDB执行以下原始查询:

qry = {"position" : SON([("$near", [52.497309,13.39385]), ("$maxDistance", distance/111.12 )])}
locations = Locations.objects(__raw__=qry)

数据库中的位置设置为[52.473266, 13.45494]

一旦我将距离设置为7.3或更高,我得到一个结果,所以看起来这两个位置必须至少相距7.3公里。

当我用Google Maps(例如开车去)计算这两个地理位置的距离时,它告诉我它距离彼此只有5.2公里。

我测试了不同位置的负载,并且google和Mongodb的距离计算总是有很大差异

我错过了什么,或者有人可以解释这种差异来自哪里?

我已经检查了this answer,但这对我不起作用......

1 个答案:

答案 0 :(得分:5)

MongoDB假设坐标为(long, lat)格式。如果您使用Great-circle distance手动计算距离,您将看到正在发生的事情:

> from math import acos, sin, cos, radians
>
> long_x, lat_x = [radians(y) for y in [52.473266, 13.45494]]
> long_y, lat_y = [radians(y) for y in [52.497309, 13.39385]]
>
> acos(sin(lat_x) * sin(lat_y) + cos(lat_x) * cos(lat_y) * cos(long_x - long_y)) * 6371.0
7.27362435031

Google采用(lat, long)格式的坐标,因此如果您提供相同的输入,Google解释将如下所示:

> acos(sin(long_x) * sin(long_y) + cos(long_x) * cos(long_y) * cos(lat_x - lat_y)) * 6371.0
4.92535867182