我在使用正則表達式將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