假设我有纬度经度:38.898556,-77.037852。如何将其转换为DMS?
预期产量为:
38 53 55 N
77 2 16 W
希望能够接受纬度和经度作为函数中的输入参数。
当前功能如下:
function convertDMS( lat, lng ) {
var convertLat = Math.abs(lat);
var LatDeg = Math.floor(convertLat);
var LatMin = (Math.floor((convertLat - LatDeg) * 60));
var LatCardinal = ((lat > 0) ? "n" : "s");
var convertLng = Math.abs(lng);
var LngDeg = Math.floor(convertLng);
var LngMin = (Math.floor((convertLng - LngDeg) * 60));
var LngCardinal = ((lng > 0) ? "e" : "w");
return LatDeg + LatCardinal + LatMin + " " + LngDeg + LngCardinal + LngMin;
}
答案 0 :(得分:16)
function toDegreesMinutesAndSeconds(coordinate) {
var absolute = Math.abs(coordinate);
var degrees = Math.floor(absolute);
var minutesNotTruncated = (absolute - degrees) * 60;
var minutes = Math.floor(minutesNotTruncated);
var seconds = Math.floor((minutesNotTruncated - minutes) * 60);
return degrees + " " + minutes + " " + seconds;
}
function convertDMS(lat, lng) {
var latitude = toDegreesMinutesAndSeconds(lat);
var latitudeCardinal = lat >= 0 ? "N" : "S";
var longitude = toDegreesMinutesAndSeconds(lng);
var longitudeCardinal = lng >= 0 ? "E" : "W";
return latitude + " " + latitudeCardinal + "\n" + longitude + " " + longitudeCardinal;
}
以下解释了此代码的工作原理:
toDegreesMinutesAndSeconds
函数。这将返回一个字符串,它将显示度,分,秒。
答案 1 :(得分:0)
我决定简单地用你的数学计算,然后分步完成。我离你的答案有一定程度的偏离,所以我打算将其归结为一个四舍五入的问题 - 我不知道做转换的确切规则。
var src = [38.898556, -77.037852];
// 38 53 55 N
// 77 2 16 W
function convertToDMS(src) {
function toDMS(n) {
// The sign doesn't matter
n = Math.abs(n);
// Get the degrees
var d = Math.floor(n);
// Strip off the answer we already have
n = n - d;
// And then put the minutes before the '.'
n *= 60;
// Get the minutes
var m = Math.floor(n);
// Remove them from the answer
n = n - m;
// Put the seconds before the '.'
n *= 60;
// Get the seconds
// Should this be round? Or rounded by special rules?
var s = Math.floor(n);
// Put it together.
return "" + d + " " + m + " " + s;
}
var dir0 = src[0] > 0 ? "N" : "S";
var dir1 = src[1] > 0 ? "E" : "W";
console.log(toDMS(src[0]) + dir0);
console.log(toDMS(src[1]) + dir1);
}
convertToDMS(src);
答案 2 :(得分:0)
这是我为此创建的两个简单函数; 只需将dms交给脚本
drop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.movies, event.previousIndex, event.currentIndex);
}
stopIt(e) {
e.stopPropagation();
}
反之亦然,只是给出脚本的度数,纬度(纬度)为假
function ConvertDMSToDEG(dms) {
var dms_Array = dms.split(/[^\d\w\.]+/);
var degrees = dms_Array[0];
var minutes = dms_Array[1];
var seconds = dms_Array[2];
var direction = dms_Array[3];
var deg = (Number(degrees) + Number(minutes)/60 + Number(seconds)/3600).toFixed(6);
if (direction == "S" || direction == "W") {
deg = deg * -1;
} // Don't do anything for N or E
return deg;
}
希望这对人们有帮助。