度分秒与经纬度互转

在线转换:http://www.minigps.net/fc.html

一、经纬度转度分秒

算法示例,假如有一个十进制的纬度:36.12432314,其转换成度分秒的规则是:

整数部分为度,小数部分 * 60 得到的整数部分为分,得到的小数部分 * 60为秒

即:36为度,0.12432314 * 60 = 7.4593884 中的7为分,0.4593884 * 60 = 27.5639304 为秒, 最终结果:36°7′27.6

//度转度°分′秒″
function ToDegrees(val) {
  if (typeof(val) == "undefined" || val == "") {
    return "";
  }
  var i = val.indexOf('.');
  var strDu = i < 0 ? val : val.substring(0, i); //获取度
  var strFen = 0;
  var strMiao = 0;
  if (i > 0) {
    var strFen = "0" + val.substring(i);
    strFen = strFen * 60 + "";
    i = strFen.indexOf('.');
    if (i > 0) {
      strMiao = "0" + strFen.substring(i);
      strFen = strFen.substring(0, i); //获取分
      strMiao = strMiao * 60 + "";
      i = strMiao.indexOf('.');
      strMiao = strMiao.substring(0, i + 4); //取到小数点后面三位
      strMiao = parseFloat(strMiao).toFixed(2); //精确小数点后面两位
    }
  }
  return strDu + "," + strFen + "," + strMiao;
}

二、度分秒转经纬度

同上相反即:36 + 7/60 + 27.6/3600 ≈ 36.12432314

//度°分′秒″转度
function ToDigital(strDu, strFen, strMiao, len) {
  len = (len > 6 || typeof(len) == "undefined") ? 6 : len; //精确到小数点后最多六位   
  strDu = (typeof(strDu) == "undefined" || strDu == "") ? 0 : parseFloat(strDu);
  strFen = (typeof(strFen) == "undefined" || strFen == "") ? 0 : parseFloat(strFen) / 60;
  strMiao = (typeof(strMiao) == "undefined" || strMiao == "") ? 0 : parseFloat(strMiao) / 3600;
  var digital = strDu + strFen + strMiao;
  if (digital == 0) {
    return "";
  } else {
    return digital.toFixed(len);
  }
}

三、硬转

看到这种有点规则的,可以尝试硬转看看效果,因为这种看起来就有点像度分秒的形式,再结合实现生产可能就是用的这种坐标,大胆尝试

var coord = ["1025553.44", "250601.56"];

var du = Math.floor(coord[0]/10000),
  fen = Math.floor(coord[0]%10000/100),
  miao = coord[0]%10000%100;
PS:写作不易,如要转裁,请标明转载出处。
%{ comment.page.total }条评论

猜你想看

微信小程序:前端开发宝典

最近文章
工具操作
  • 内容截图
  • 全屏
登录
注册
回顶部