使用rethinkdb计算两个纬度和经度点之间的距离
using rethinkdb calculate distance between two latitude and longitude points
我们正在使用 rethinkdb 地理空间特征来计算两个纬度和经度之间的距离,但 rethinkdb 的结果 return 是不同的,如果我交叉检查 google 地图或任何距离计算器,结果看起来是错误的网站。在 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 上测试同一个点时,它 return 结果为 642.1854781517294 公里。
与其他一些地理系统不同,RethinkDB 使用先有经度,后有纬度的惯例。
我们做出该决定是为了与 GeoJSON 格式保持一致。
见http://www.rethinkdb.com/api/javascript/point/
从你的示例来看,你似乎在 RethinkDB 中正确计算了距离,但在在线工具中输入了相反方向的坐标。
在正确字段中输入纬度和经度后,我得到了一致的结果:
更高级的注释:
小数点后有一些差异。在线计算器声称 "The script uses "Haversine" 公式,导致近似值小于 1%。"我认为这意味着高达 1% 的误差,所以这种偏差是可以预料的。
RethinkDB 根据 C. F. F. Karney 1 的算法使用椭圆体上的测地线来计算距离。这是一种极其精确的算法,可以计算出双精度浮点数极限的测地线。
您会看到与 Google 地图的偏差更大(这两个点的距离为 735.234653 公里)。看起来Google地图使用大圆距离,完全没有考虑地球的椭圆体形状。
1 http://link.springer.com/article/10.1007%2Fs00190-012-0578-z
我们正在使用 rethinkdb 地理空间特征来计算两个纬度和经度之间的距离,但 rethinkdb 的结果 return 是不同的,如果我交叉检查 google 地图或任何距离计算器,结果看起来是错误的网站。在 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 上测试同一个点时,它 return 结果为 642.1854781517294 公里。
与其他一些地理系统不同,RethinkDB 使用先有经度,后有纬度的惯例。 我们做出该决定是为了与 GeoJSON 格式保持一致。
见http://www.rethinkdb.com/api/javascript/point/
从你的示例来看,你似乎在 RethinkDB 中正确计算了距离,但在在线工具中输入了相反方向的坐标。
在正确字段中输入纬度和经度后,我得到了一致的结果:
更高级的注释: 小数点后有一些差异。在线计算器声称 "The script uses "Haversine" 公式,导致近似值小于 1%。"我认为这意味着高达 1% 的误差,所以这种偏差是可以预料的。
RethinkDB 根据 C. F. F. Karney 1 的算法使用椭圆体上的测地线来计算距离。这是一种极其精确的算法,可以计算出双精度浮点数极限的测地线。
您会看到与 Google 地图的偏差更大(这两个点的距离为 735.234653 公里)。看起来Google地图使用大圆距离,完全没有考虑地球的椭圆体形状。
1 http://link.springer.com/article/10.1007%2Fs00190-012-0578-z