按照经纬度计算两点之间距离(怕怕系列副产品之一)
发布于 13 年前 作者 olddog 12416 次预览 最后一次回复是 13 年前 来自
使用者需要根据实际情况,稍做修改。废话不多说,直接上代码。
var sphereDistance = function (a, b) {
var ax = null;
var ay = null;
var bx = null;
var by = null;
for (var key in a) {
if (ax == null) {
ax = a[key] * (Math.PI / 180);
} else if (ay == null) {
ay = a[key] * (Math.PI / 180);
}
}
for (var key in b) {
if (bx == null) {
bx = b[key] * (Math.PI / 180);
} else if (by == null) {
by = b[key] * (Math.PI / 180);
}
}
var sin_x1 = Math.sin(ax), cos_x1 = Math.cos(ax);
var sin_y1 = Math.sin(ay), cos_y1 = Math.cos(ay);
var sin_x2 = Math.sin(bx), cos_x2 = Math.cos(bx);
var sin_y2 = Math.sin(by), cos_y2 = Math.cos(by);
var cross_prod = cos_y1 * cos_x1 * cos_y2 * cos_x2 + cos_y1 * sin_x1 * cos_y2 * sin_x2 + sin_y1 * sin_y2;
if (cross_prod >= 1 || cross_prod <= -1) {
if (!(Math.abs(cross_prod) - 1 < 0.000001)) {
return false;
}
return cross_prod > 0 ? 0 : Math.PI;
}
return Math.acos(cross_prod);
};8 回复
以前写的用于计算两点坐标距离的PHP代码:
计算方法好像跟你这个不一样的呐
@@,我是从MongoDB的函数库里直接扒下来的,我试验了下,用着还成
《HTML5高级程序设计》里面有一个相关知识的函数。。
请教一个问题:地球是圆的,对吧 ^_^ 即2个经纬度之间是弧形,如果所求的距离很大,如何解决这个误差?谢谢~
这个就是呀
平面的是
@olddog 收藏!最好再搞个带注释的,呵呵~
@olddog 参数细节能详细点儿吗,谢谢~
此函数仅计算球面距离。 希望计算大地坐标系中两点距离的同学可使用Vincenty公式:
http://www.movable-type.co.uk/scripts/latlong-vincenty.html