我正在尝试编写一个函数,将我的十进制度数(纬度或经度)转换为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);
}
我走得正确吗?
我正在尝试编写一个函数,将我的十进制度数(纬度或经度)转换为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);
}
我走得正确吗?
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
*/
仅供参考,答案如下
function ConvertDDToDMS(D){
return [0|D, 'd ', 0|(D<0?D=-D:D)%1*60, "' ", 0|D*60%1*60, '"'].join('');
}
在-1°和0°之间的角度无法工作。 真不走运! hc