火星坐标与百度坐标互转

 2018年11月09日 分类:JavaScript/前端设计  评论(0)  阅读(1212)

有时候百度地图的api接口提供了坐标互转,然而有一定的额度限制,那么经过百度发现了一个不错的转换思路,代码如下:

/**
 * 火星坐标转为百度坐标,GCJ为火星坐标,BD为百度坐标
 * @param {Object[]} arr 
 * @param {Number} arr.lng - 经度
 * @param {Number} arr.lat - 纬度
 * @param {Number} n - 保留小数点后几位
 * @returns {Object} 结构同入参arr
 */
function GCJ_to_BD (arr, n) {
  var result = [];
  var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  if (!n) {
    n = 7
  }
  m = Math.pow(10, n);
  for (var i = 0; i < arr.length; i++) {
    var x = arr[i].lng,
      y = arr[i].lat;
    var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
    var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
    var bd_lon = z * Math.cos(theta) + 0.0065;
    var bd_lat = z * Math.sin(theta) + 0.006;
    var obj = {}
    obj.lng = Math.round(bd_lon * m) / m;
    obj.lat = Math.round(bd_lat * m) / m;
    result.push(obj);
  }
  return result;
}


//参数同上
function BD_to_GCJ(arr, n) {
  var result = [],
    m;
  var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  if (!n) {
    n = 7
  }
  m = Math.pow(10, n);
  for (var i = 0; i < arr.length; i++) {
    var x = arr[i].lng - 0.0065,
      y = arr[i].lat - 0.006;
    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
    var gg_lon = z * Math.cos(theta);
    var gg_lat = z * Math.sin(theta);
    var obj = {}
    obj.lng = Math.round(gg_lon * m) / m;
    obj.lat = Math.round(gg_lat * m) / m;
    result.push(obj);
  }
  return result;
}

wechat_app
微信公众号:webapp_club
关注一下,或许能让你获得更多前端咨询信息。
加载中...
分享中心

评论 抢沙发

评论前必须登录


如果你觉得本站内容对你有所帮助,比如提升你对编程方面的认识,你可以通过上面的二维码请博主喝杯咖啡,安好。

WEB前端开发部落(公众号:webapp_club)

群列表

前端初级学习群:初级Web前端学习群(后期为支付入群)
PHP初级学习群:PHP(MySQL)学习交流群
QQ群仅作为相关领域讨论平台,均提供高质量问题交流,禁止闲聊,无法接受的朋友请勿加群!
进群需要通过这里获取进群码才能进群哦!