JavaScript

火星坐标与百度坐标互转

智言 2018年11月09日 阅读(2836) 0

有时候百度地图的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;
}

智言

业务开发请联系QQ:5679361

评论 抢沙发

评论前必须登录!

 


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

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

群列表

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

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏