使用js在百度地图根据经纬度计算相隔距离

百度地图开发,计算两个点间直线距离js方法

//百度坐标距离计算,从压缩代码里扣出来的,故可读性差些,将就着还能看
var R = 6370996.81,//地球半径(米)
    p=null,
    j = void 0,
    Ib = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function Jb(a) {
    var b = "", c, d, e = "", f, g = "", i = 0;
    f = /[^A-Za-z0-9\+\/\=]/g;
    if (!a || f.exec(a)) return a;
    a = a.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    do c = Ib.indexOf(a.charAt(i++)),
            d = Ib.indexOf(a.charAt(i++)),
            f = Ib.indexOf(a.charAt(i++)),
            g = Ib.indexOf(a.charAt(i++)),
            c = c << 2 | d >> 4,
            d = (d & 15) << 4 | f >> 2,
            e = (f & 3) << 6 | g,
            b += String.fromCharCode(c), 64 != f && (b += String.fromCharCode(d)), 64 != g && (b += String.fromCharCode(e));
    while (i < a.length);
    return b;
}
function Za(a) {
    return "string" == typeof a;
}
function Point(a, b) {
    isNaN(a) && (a = Jb(a), a = isNaN(a) ? 0 : a);
    Za(a) && (a = parseFloat(a));
    isNaN(b) && (b = Jb(b), b = isNaN(b) ? 0 : b);
    Za(b) && (b = parseFloat(b));
    this.lng = a;
    this.lat = b
}
Point.prototype.mb = function (a) {
    return a && this.lat == a.lat && this.lng == a.lng
};
function OD(a, b, c) {
    for (; a > c;) a -= c - b;
    for (; a < b;) a += c - b;
    return a;
}
function SD(a, b, c) {
    b != p && (a = Math.max(a, b));
    c != p && (a = Math.min(a, c));
    return a;
}
function Tk(a) {
    return Math.PI * a / 180;
}
function Pe(a, b, c, d) {
    return R * Math.acos(Math.sin(c) * Math.sin(d) + Math.cos(c) * Math.cos(d) * Math.cos(b - a));
}
function Vo(a, b) {
    if (!a || !b) return 0;
    a.lng = OD(a.lng, -180, 180);
    a.lat = SD(a.lat, -74, 74);
    b.lng = OD(b.lng, -180, 180);
    b.lat = SD(b.lat, -74, 74);
    return Pe(Tk(a.lng),Tk(b.lng),Tk(a.lat),Tk(b.lat))
}
function getDistance(a, b) {
    if (a && b) {
        if (a.mb(b)) return 0;
        var c;
        c = Vo(a, b);
        if (c === p || c === j) c = 0;
        return c;
    }
}

// 测试网址
// http://api.map.baidu.com/lbsapi/getpoint/index.html

//使用并保留小数点后两位
var p1 = new Point(116.425361,39.89941);
var p2 = new Point(116.424427,39.899272);
var m = getDistance(p1,p2).toFixed(2);
//获取到的单位是 米
console.log(m+"米");
发布了69 篇原创文章 · 获赞 10 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/mhtqq809201/article/details/81333183