火星坐标与百度坐标互转

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

有时候百度地图的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
关注一下,或许能让你获得更多前端咨询信息。
加载中...

评论 抢沙发

评论前必须登录(开发中...)