使用rethinkdb计算两个纬度和经度点之间的距离

时间:2016-03-03 06:15:22

标签: google-maps geospatial distance rethinkdb

我们使用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。

1 个答案:

答案 0 :(得分:1)

与其他一些地理系统不同,RethinkDB使用先具有经度的惯例,然后是纬度。 我们做出了这个决定,以便与GeoJSON格式保持一致。

请参阅http://www.rethinkdb.com/api/javascript/point/

通过查看您的示例,您似乎已经在RethinkDB中正确计算了距离,但在在线工具中输入了相反方向的坐标。

将纬度和经度输入正确的字段后,我得到了一致的结果: enter image description here

更高级的说明: 小数点后面有一些差异。在线计算器声称"脚本使用" Haversine"公式,其近似值小于1%。"我认为它意味着最多1%的误差,所以这种偏差是可以预期的。

RethinkDB使用椭圆体上的测地线来计算距离,基于C. F. F. Karney 1的算法。这是一种非常精确的算法,可以计算到双精度浮点数限制的测地线。

你会看到更多偏离谷歌地图(这两点给我735.234653公里)。看起来Google地图使用的是大圆距离,它们根本不考虑地球的椭圆形状。

1 http://link.springer.com/article/10.1007%2Fs00190-012-0578-z