我在 GeoServer 源代码中找到了一个函数,它允许我在 Javascript 中将度分秒转换为十进制。但我需要将Degrees Decimal Minutes 转换为 Decimal Degrees。
当前函数将执行此操作:
input: N 03° 01’ 37”
output: 30.016666666666666
但我需要一个函数来执行此操作:
input: 26° 23.90473
output: ????
最好的答案是调整现有的 RegEx,但任何转换它的 Javascript 解决方案都可以。
这是当前函数: 但我需要它接受度数小数分而不是度分秒。
dmsToDeg: function(dms) {
if (!dms) {
return Number.NaN;
}
var neg= dms.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0;
dms= dms.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,'');
dms= dms.replace(/\s/g,'');
var parts=dms.match(/(\d{1,3})[.,°d]?(\d{0,2})[']?(\d{0,2})[.,]?(\d{0,})(?:["]|[']{2})?/);
if (parts==null) {
return Number.NaN;
}
// parts:
// 0 : degree
// 1 : degree
// 2 : minutes
// 3 : secondes
// 4 : fractions of seconde
var d= (parts[1]? parts[1] : '0.0')*1.0;
var m= (parts[2]? parts[2] : '0.0')*1.0;
var s= (parts[3]? parts[3] : '0.0')*1.0;
var r= (parts[4]? ('0.' + parts[4]) : '0.0')*1.0;
var dec= (d + (m/60.0) + (s/3600.0) + (r/3600.0))*neg;
return dec;
},
最佳答案
新功能...
dmsToDeg: function(dms) {
if (!dms) {
return Number.NaN;
}
var neg = dms.match(/(^\s?-)|(\s?[SW]\s?$)/)!=null? -1.0 : 1.0;
dms = dms.replace(/(^\s?-)|(\s?[NSEW]\s?)$/,'');
var parts=dms.match(/(\d{1,3})[.,°d ]?\s*(\d{0,2}(?:\.\d+)?)[']?/);
if (parts==null) {
return Number.NaN;
}
// parts:
// 0 : degree
// 1 : degree
// 2 : minutes
var d= (parts[1]? parts[1] : '0.0')*1.0;
var m= (parts[2]? parts[2] : '0.0')*1.0;
var dec= (d + (m/60.0))*neg;
return dec;
}
我已经删除了正则表达式的最后一部分,它捕获秒和秒的分数。我已经添加到捕获分钟的部分 (?:\.\d+)?
这是一个非捕获组 (?:
) - 因为我们不需要它与分钟的整数部分分开捕获。它需要一个小数点 (\.
),然后是一位或多位数字 (\d+
)。整个组是可选的 (?
) - 即输入仍然可以是整数。
编辑:根据您的评论,我将其修改为更加与空白无关...它现在查找后跟空格或以下字符之一的整数:". ,°d"然后是十进制分钟。解决方案也发布到您的 jsfiddle:http://jsfiddle.net/NJDp4/6/
关于javascript - 正则表达式/Javascript 将十进制度分转换为十进制度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938115/