我们使用rethinkdb地理空间功能来计算两个纬度和经度之间的距离,但rethinkdb返回的结果是不同的,如果我在谷歌地图或任何距离计算器网站上交叉检查看起来不对。我在rethinkdb帮助下复制了相同的代码。
var point1 = r.point(-122.423246,37.779388);
var point2 = r.point(-117.220406,32.719464);
r.distance(point1, point2, {unit: 'km'})
// result returned
734.1252496021841 km
但是当我在http://www.onlineconversion.com/map_greatcircle_distance.htm上测试相同的点时,它返回以下结果642.1854781517294 km。
答案 0 :(得分:1)
与其他一些地理系统不同,RethinkDB使用先具有经度的惯例,然后是纬度。 我们做出了这个决定,以便与GeoJSON格式保持一致。
请参阅http://www.rethinkdb.com/api/javascript/point/
通过查看您的示例,您似乎已经在RethinkDB中正确计算了距离,但在在线工具中输入了相反方向的坐标。
更高级的说明: 小数点后面有一些差异。在线计算器声称"脚本使用" Haversine"公式,其近似值小于1%。"我认为它意味着最多1%的误差,所以这种偏差是可以预期的。
RethinkDB使用椭圆体上的测地线来计算距离,基于C. F. F. Karney 1的算法。这是一种非常精确的算法,可以计算到双精度浮点数限制的测地线。
你会看到更多偏离谷歌地图(这两点给我735.234653公里)。看起来Google地图使用的是大圆距离,它们根本不考虑地球的椭圆形状。
1 http://link.springer.com/article/10.1007%2Fs00190-012-0578-z