我在使用正则表达式将JavaScript转换为JavaScript中的DD时遇到了麻烦。我从geoserver中获取了这些代码,但它似乎不起作用。我希望它能够将所有测试用例转换为正确或非常接近的答案。Regular Expression/Javascript:Convert Degrees Minutes Seconds to Decimal Degrees
我真的不在乎,如果函数是完全JavaScript或沉重的正则表达式,我只是需要它的工作。
您可以测试它的jsfiddle http://jsfiddle.net/NJDp4/13/
这里是我的测试案例: dmsToDeg( 'N 03 01’ 37” '); dmsToDeg('03 01 37'); dmsToDeg('03 01'37“N'); dmsToDeg('076 40'35“W'); dmsToDeg('W 076 40'35''); dmsToDeg('N 05 11'17“');
这里是我的代码:
function dmsToDeg (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 ]?\s*(\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;
}
哇,你的代码通过了我的测试用例,还有一些用了飞行颜色。非常感谢! – capdragon 2011-05-12 13:23:48
它很干净,很简单,而且最棒!我喜欢它。 – capdragon 2011-05-12 13:39:39