首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex/Javascript转换度、十进制分钟到十进制度

Regex/Javascript转换度、十进制分钟到十进制度
EN

Stack Overflow用户
提问于 2011-05-09 14:14:20
回答 1查看 2.2K关注 0票数 2

我在GeoServer源代码中找到了一个函数,它允许我在Javascript中将度数、分钟、秒转换为十进制度。但是我需要把度,十进制分钟,转换成十进制。

目前的职能是这样做的:

代码语言:javascript
复制
   input: N 03° 01’ 37” 
   output: 30.016666666666666

但我需要一个能做到这一点的函数:

代码语言:javascript
复制
   input: 26° 23.90473
   output: ????

最好的解决方案是调整现有的RegEx,但是任何转换它的Javascript解决方案都可以。

下面是当前的函数:,但我需要它接受度十进制分钟而不是度数分钟秒。

代码语言: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; 
    },
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-09 15:33:38

新功能..。

代码语言: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?)$/,''); 
        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“,然后是十进制分钟。解决方案也张贴到您的小提琴:http://jsfiddle.net/NJDp4/6/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5938115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档