• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
02二不二
博客园    首页    新随笔    联系   管理    订阅  订阅

计算gps

var earth_radius=6378.137;

// 计算两个脑残点之间的距离, 单位 : 公里
function get_map_distance(latA,lngA,latB,lngB){
    var a=latA*Math.PI/180.0-latB*Math.PI/180.0;
    var b=lngA*Math.PI/180.0-lngB*Math.PI/180.0;
    var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(latA*Math.PI/180.0) * Math.cos(latB*Math.PI/180.0) * Math.pow(Math.sin(b / 2), 2)));
    return s * earth_radius;
}

// 计算两个脑残点之间的夹角, 单位 : 度
function get_map_bearing(lat1,lng1,lat2,lng2){
    var dLon = (lng2-lng1)* Math.PI / 180;
    var rlat1 = lat1* Math.PI / 180;
    var rlat2 = lat2* Math.PI / 180;
    var y = Math.sin(dLon) * Math.cos(rlat2);
    var x = Math.cos(rlat1)*Math.sin(rlat2) - Math.sin(rlat1)*Math.cos(lat2)*Math.cos(dLon);
    var rad = Math.atan2(y, x);
    var brng = rad* 180 / Math.PI;
    return (brng + 360) % 360;
}

// 根据距离和夹角,启示点, 在地图上找脑残点
function get_map_poi_distance(lat1,lng1,distance,bearing){
    var brng = bearing* Math.PI / 180;
    var rlat1 = lat1* Math.PI / 180;
    var rlng1 = lng1* Math.PI / 180;
    var dist = distance/earth_radius;
     var lat2 = Math.asin( Math.sin(rlat1)*Math.cos(dist) +
        Math.cos(rlat1)*Math.sin(dist)*Math.cos(brng) );
    var lon2 = rlng1 + Math.atan2(Math.sin(brng)*Math.sin(dist)*Math.cos(rlat1),
        Math.cos(dist)-Math.sin(rlat1)*Math.sin(lat2));
    lon2 = (lon2+3*Math.PI) % (2*Math.PI) - Math.PI;
    return {
        lat : (lat2* 180 / Math.PI),
        lng : (lon2* 180 / Math.PI)
    }
}

// 获得两个脑残点的中间脑残点GPS坐标, 绝对不是两个加一下除以2哦!!!
function get_map_midpoint(lat1,lng1,lat2,lng2){
    var dLon = (lng2-lng1)* Math.PI / 180;
    var rlat1 = lat1* Math.PI / 180;
    var rlat2 = lat2* Math.PI / 180;
    var rlng1 = lng1* Math.PI / 180;
    var Bx = Math.cos(rlat2) * Math.cos(dLon);
    var By = Math.cos(rlat2) * Math.sin(dLon);
    var lat3 = Math.atan2(Math.sin(rlat1)+Math.sin(rlat2),
        Math.sqrt( (Math.cos(rlat1)+Bx)*(Math.cos(rlat1)+Bx) + By*By ) );
    var lon3 = rlng1 + Math.atan2(By, Math.cos(rlat1) + Bx);
    return {
        lat : (lat3* 180 / Math.PI),
        lng : (lon3* 180 / Math.PI)
    }
}
posted @ 2016-05-10 11:21  02二不二  阅读(221)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3