JavaScript中将十进制度数转换为度分秒

17

我正在尝试编写一个函数,将我的十进制度数(纬度或经度)转换为DMS度分秒。我知道我应该把小数点后的数字乘以60,然后再次得到一个小数。但是我是个新手。我应该将这个数字拆分吗?

function ConvertDDToDMS(DD) {
    eg. DD =-42.4
    D= 42;
    M= 4*60;
    S= .M * 60;
    var DMS =

    return DMS //append Direction (N, S, E, W);
}

我走得正确吗?


作业任务?提示:使用 Math.floor。 - Austin Taylor
被接受的答案的Javascript实现对于负值无效。 - Jaco Briers
1
更好的答案:https://dev59.com/WloU5IYBdhLWcg3wCjvx#37893239 - devuxer
12个回答

0
好的答案在这里,但要以标准格式获取DMS。
function padZero(num, targetLength) {
  return String(num).padStart(targetLength, "0");
}

function ddToDms(deg, latOrlon) {
  var absolute = Math.abs(deg);
  var degrees = Math.floor(absolute);
  var minNt = (absolute - degrees) * 60;
  var minutes = Math.floor(minNt);
  var seconds = ((minNt - minutes) * 60).toFixed(2);
  var secs = Math.floor(seconds);

  // Get cardinal direction
  if (latOrlon == "lat") {
    var direction = deg >= 0 ? "N" : "S";
  } else if (latOrlon == "lon") {
    var direction = deg >= 0 ? "E" : "W";
  }

  // Ensure 60 minutes add 1 to degree and 60 seconds add 1 to minutes
  if (seconds == 60) {
    minutes++;
    seconds = 0;
  }
  if (minutes == 60) {
    degrees++;
    minutes = 0;
  }

  // Pad with zero
  if (
    (degrees < 10 && latOrlon == "lat") ||
    (degrees > 10 && degrees < 100 && latOrlon == "lon")
  ) {
    var degrees = padZero(degrees, String(degrees).length + 1);
  } else if (degrees < 10 && latOrlon == "lon") {
    var degrees = padZero(degrees, String(degrees).length + 2);
  }
  if (minutes < 10) {
    var minutes = padZero(minutes, String(minutes).length + 1);
  }
  if (secs < 10) {
    var seconds = padZero(seconds, String(seconds).length + 1);
  }

  // Validate lat and lon
  if (deg > 90 && latOrlon == "lat") {
    alert("LATITUDE CANNOT BE MORE THAN 90");
  } else if (deg > 180 && latOrlon == "lon") {
    alert("LONGITUDE CANNOT BE MORE THAN 180");
  } else {
    return degrees + "°" + minutes + "'" + seconds + '"' + direction;
  }
}

// Example
var lat = 9.129438;
var lon = -4.233587;

var latDMS = ddToDms(lat, 'lat'); 
var lonDMS = ddToDms(lon, 'lon');

console.log('latDMS: '+ latDMS);
console.log('lonDMS: '+ lonDMS);

/*
Output
latDMS: 09°07'45.98"N
lonDMS: 004°14'00.91"W
*/

-1

仅供参考,答案如下

function ConvertDDToDMS(D){
return [0|D, 'd ', 0|(D<0?D=-D:D)%1*60, "' ", 0|D*60%1*60, '"'].join('');

}

在-1°和0°之间的角度无法工作。 真不走运! hc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接