场景:将度分秒转换为度或将度转换为度分秒

利用了js库<script src="./gpsToDu.js"><script>

gpsToDu(gpsStr) / 将DMS 或 DM 抓换成 D  ---将度分秒转换为度,注意gpsStr是一个字符串,以下几个函数也是如此

duToGpsDMS(duStr,duDir) / 将D 抓换成 DMS

duToGpsDM(duStr,duDir) / 将D 抓换成 DM

以下是js库的源码

/** Created by postbird on 2016/4/1.  ...*/
/**
 *      @postbird
 *      1、本插件采用js编写,可直接将函数复制到个人js文件,减少get请求数
 *      2、author:powered by postbird
 *      3、email: ptbird@yeah.net
 *      4、site:http://www.ptbird.cn
 * */
/**
 文件说明:将gps的坐标转换成度形式的坐标方便计算 gpsToDu.js
 功能说明:
        将str1 和 str2 形式的坐标转换成 str3形式  【 度分秒格式和度分格式 转换成 度格式 】
             var str1="W 39°55′44″";//d-m-s  或者  str1="39°55′44″ W";
             var str2="N 39°55.7333′";//d-m   或者  str2="39°55.7333′ E";
             to:
             var str3="39.9288888885"; // d
 */
/**
 *  函数使用说明:
 *      1、直接调用函数  gpsToDu(gpsStr);
 *  返回说明: 返回结果数组
 *      1 gpsDu[0] 表示方向 ,小写字母 s w e n
 *      2 gpsDu[1] 表示计算的结果 , 数字-19.8222222
 * */
/**
 *  优点: 自动处理空格与其他无关字符,只处理表示方向、小数点、数字三种字符
 *  缺点: 小数点必须为半角的小数点 .  不能是全角小数点
 * */
function gpsToDu(gpsStr){
    gpsStr=gpsStr.toLowerCase();
    gpsStr=gpsStr.replace(/\s+/g,"");
    var tempStrArray=new Array();
    var flag=1;
    var lastFlag=0;
    var strLength=gpsStr.length;
    var gpsDu=new Array();
    var gpsDir;
    var tempcount=0;
    var tempString="";
    var tempPointFlag=0;
    if (gpsStr[0] == 'w' || gpsStr[0] == 's') {
        flag = -1;
        lastFlag=0;
        gpsDir=gpsStr[0];
    } else if (gpsStr[strLength - 1] == 'w' || gpsStr[strLength - 1] == 's') {
        flag = -1;
        lastFlag=1;
        gpsDir=gpsStr[strLength - 1];
    }
    for(var i=0;i<=strLength;i++){
        if(gpsStr[i]>='0' && gpsStr[i]<='9') {
          tempString += gpsStr[i];
            continue;
        }else if(gpsStr[i]=='.'){
            tempStrArray[tempcount]=tempString;
            tempString="";
            tempcount++;
            tempStrArray[tempcount]='.';
            tempPointFlag=1;
            tempcount++;
        }else if(tempString.length>0){
            tempStrArray[tempcount]=tempString;
            tempString="";
            tempcount++;
        }
    }
    if(tempPointFlag==0){
        var num1=parseInt(tempStrArray[0],10);
        var num2=parseInt(tempStrArray[1],10);
        var num3=parseInt(tempStrArray[2],10);
        console.log(num1+'  '+num2/60+' '+num3/(60*60));
        gpsDu[1]=num1+num2/60+num3/(60*60);
        gpsDu[1]=gpsDu[1]*flag;
        gpsDu[0]=gpsDir;
    }else if (tempPointFlag==1){
        var num1=parseInt(tempStrArray[0],10);
        var num2=parseFloat(tempStrArray[1]+'.'+tempStrArray[3],10);
        gpsDu[1]=num1+num2/60;
        gpsDu[1]=gpsDu[1]*flag;
        gpsDu[0]=gpsDir;
    }
    return gpsDu;
}

function duToGpsDMS(duStr,duDir){
	console.log(duStr + "---");
    duStr=duStr.toLowerCase();
    duStr=duStr.replace(/\s+/g,"");
    duDir=duDir.toUpperCase();
    var strLength=duStr.length;
    var tempString="";
    var tempStrArray=new Array();
    var tempCount=0;
    var tempPointFlag=0;
    var gpsDMS;
    for(var i=0;i<=strLength;i++){
        if(duStr[i]>='0' && duStr[i]<='9') {
            tempString += duStr[i];
            continue;
        }else if(duStr[i]=='.'){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
            tempStrArray[tempCount]='.';
            tempPointFlag=1;
            tempCount++;
        }else if(tempString.length>0){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
        }
    }
    if(tempPointFlag==1){
        var num1=tempStrArray[0];
        var num2=parseFloat('0'+tempStrArray[1]+ tempStrArray[2],10)*60;
        var num3=parseInt(parseFloat((num2-parseInt(num2,10))*60,10),10);
        num2=parseInt(num2,10);
        console.log(tempStrArray);
        console.log(num1+"   "+num2+"   "+num3+ " ");
        gpsDMS=duDir+" "+num1+"°"+num2+"′"+num3+"″";
        //gpsDMS=+num1+"°"+num2+"′"+num3+"″"+" "+duDir;
        // console.log(gpsDMS);
    }
    return gpsDMS;
}
function duToGpsDM(duStr,duDir){
    duStr=duStr.toLowerCase();
    duStr=duStr.replace(/\s+/g,"");
    duDir=duDir.toUpperCase();
    var strLength=duStr.length;
    var tempString="";
    var tempStrArray=new Array();
    var tempCount=0;
    var tempPointFlag=0;
    var gpsDM;
    for(var i=0;i<=strLength;i++){
        if(duStr[i]>='0' && duStr[i]<='9') {
            tempString += duStr[i];
            continue;
        }else if(duStr[i]=='.'){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
            tempStrArray[tempCount]='.';
            tempPointFlag=1;
            tempCount++;
        }else if(tempString.length>0){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
        }
    }
    if(tempPointFlag==1){
        var num1=tempStrArray[0];
        var num2=parseFloat('0'+tempStrArray[1]+ tempStrArray[2],10)*60;
        gpsDM=duDir+" "+num1+"°"+num2+"′";
        //gpsDM=+num1+"°"+num2+"′"+" "+duDir;
        // console.log(gpsDM);
    }
    return gpsDM;
}
以下是将度分秒120°23′41″拆分为json对象的方法

/**
	 * 将度分秒120°23′41″拆分为json对象
	 */
	function DegreeConvertBack(value){ 
	    var du = value.split("°")[0];
	    var fen = value.split("°")[1].split("′")[0];  
	    var miao = value.split("°")[1].split("′")[1].split('″')[0];  
	    return {'D':du,'F':fen,'M':miao};  
	}

以下是一个测试的html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GPS  度分秒、度分、度 相互转化插件 pgsToDU.js</title>
    <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="./gpsToDu.js"></script>
    <script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
    <script src="http://cdn.bootcss.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    <style>
        .well2{
            background-color: #fff;
            border:0px;
            padding:19px;
            min-height: 20px;
            color:slategrey;
        }
        .form-control{
            width:50%;
        }
    </style>
</head>

<body>
    <div class="container" style="margin-bottom:200px;">
        <div class="row">
            <div class="page-header">
                    <h1>GPS 度分秒 | 度分 | 度 相互转化插件  <small>gpsToDu.js</small> </h1>
            </div>
            <div class="col-md-12">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <h4 class="">体验一 DMS | DM to D:</h4>
                    </div>
                    <div class="panel-body">
                        <div class="well2">
                            注:1、将gps数据转换成小数点格式即度格式: <font color="red">W 39°55′44″</font>->39.9288888885 或  <font color="red"> 39°55.7333 ' N </font>->39.9288888885 <br>
                            注: 2、其中: W S N E 分别表示经纬度方向 返回结果中 W S 将返回负值
                        </div>
                        <input type="text" id="gpsToDuInputId" class="form-control" placeholder="输入GPS数据 度分秒格式或 度分格式 示例:W 39°55′44″"><br>
                    </div>
                    <div class="panel-footer">
                        <button id="gpsToDuBtn" class="btn btn-info btn-sm ">点击转换,结果将在后面显示</button>
                        转换结果: <strong><font color="red"><span id="gpsToDuSpanId"></span></font></strong>
                    </div>
                </div>
            </div>

            <div class="col-md-12">
                <div class="panel panel-default">
                    <div class="panel-heading">
                      <h4>体验二 D to DMS:</h4>
                    </div>
                    <div class="panel-body">
                        <div class="well2">
                            注:1、将小数点格式即度格式转换成gps数据中的DMS格式: <font color="red">39.9288888885</font>->W 39°55′44″ <br>
                            注: 2、其中: W S N E 分别表示经纬度方向
                        </div>
                        <input type="text" id="duToDMSInputId" class="form-control" placeholder="输入D 度格式数据 示例:-39.9288888885"><br>
                        选择经纬度方向:
                        <select name="" id="duToDMSSelectId" >
                            <option value="n" selected>N(北纬)</option>
                            <option value="w" selected>W(西经)</option>
                            <option value="s" selected>S(南纬)</option>
                            <option value="e" selected>E(东经)</option>
                        </select>
                    </div>
                    <div class="panel-footer">
                        <button id="duToDMSBtn" class="btn btn-warning btn-sm ">点击转换,结果将在后面显示</button>
                        转换结果: <strong><font color="red"><span id="duToDMSSpanId"></span></font></strong>
                    </div>
                </div>
            </div>
            <div class="col-md-12">
               <div class="panel panel-default">
                   <div class="panel-heading">
                       <h4>体验三 D to DM:</h4>
                   </div>
                   <div class="panel-body">
                       <div class="well2">
                           注:1、将小数点格式即度格式转换成gps数据中的DM格式: <font color="red">39.9288888885</font>-><font color="red">W  39°55.7333′</font> <br>
                           注: 2、其中: W S N E 分别表示经纬度方向
                       </div>
                       <input type="text" id="duToDMInputId" class="form-control" placeholder="输入D 度格式数据 示例:-39.9288888885"><br>
                       选择经纬度方向:
                       <select name="" id="duToDMSelectId" >
                           <option value="n" selected>N(北纬)</option>
                           <option value="w" selected>W(西经)</option>
                           <option value="s" selected>S(南纬)</option>
                           <option value="e" selected>E(东经)</option>
                       </select>
                   </div>
                   <div class="panel-footer">
                       <button id="duToDMBtn" class="btn btn-danger btn-sm ">点击转换,结果将在后面显示</button>
                       转换结果: <strong><font color="red"><span id="duToDMSpanId"></span></font></strong>
                   </div>
               </div>
            </div>
            <div class="col-md-12">
                <div class="page-header"><h2> 使用说明: </h2> </div>
                <h2><small>一、文件引入:<strong><span><</span><font color="#cd5c5c">script src="./gpsToDu.js"><</font>script></strong></small></h2>
                <h2><small>二、文件说明:</small></h2>
                <div class="well2"> <h4>文件中有三个函数分别为
                    <br><br> <strong> gpsToDu(gpsStr) / <small>将DMS 或 DM 抓换成 D</small></strong>
                    <br><br><strong> duToGpsDMS(duStr,duDir) / <small>将D 抓换成 DMS</small></strong>
                    <br><br><strong> duToGpsDM(duStr,duDir) /  <small>将D 抓换成 DM</small></strong> </h4>  </div>
                <h2><small>三、函数调用: 以第一个体验举例</small></h2>
                <pre ><h4>
                    $('#gpsToDuBtn').click(function(){

                           var str1=$('#gpsToDuInputId').val();

                           $('#gpsToDuSpanId').text(gpsToDu(str1)[1]);

                      });
                </h4></pre>
            </div>
            <div class="col-md-12">
                <div class="page-header"><h2> JS源代码: </h2> </div>
               <pre>
/** Created by postbird on 2016/4/1.  ...*/
/**
 *      @postbird
 *      1、本插件采用js编写,可直接将函数复制到个人js文件,减少get请求数
 *      2、author:powered by postbird
 *      3、email: ptbird@yeah.net
 *      4、site:http://www.ptbird.cn
 * */
/**
 文件说明:将gps的坐标转换成度形式的坐标方便计算 gpsToDu.js
 功能说明:
        将str1 和 str2 形式的坐标转换成 str3形式  【 度分秒格式和度分格式 转换成 度格式 】
             var str1="W 39°55′44″";//d-m-s  或者  str1="39°55′44″ W";
             var str2="N 39°55.7333′";//d-m   或者  str2="39°55.7333′ E";
             to:
             var str3="39.9288888885"; // d
 */
/**
 *  函数使用说明:
 *      1、直接调用函数  gpsToDu(gpsStr);
 *  返回说明: 返回结果数组
 *      1 gpsDu[0] 表示方向 ,小写字母 s w e n
 *      2 gpsDu[1] 表示计算的结果 , 数字-19.8222222
 * */
/**
 *  优点: 自动处理空格与其他无关字符,只处理表示方向、小数点、数字三种字符
 *  缺点: 小数点必须为半角的小数点 .  不能是全角小数点
 * */
function gpsToDu(gpsStr){
    gpsStr=gpsStr.toLowerCase();
    gpsStr=gpsStr.replace(/\s+/g,"");
    var tempStrArray=new Array();
    var flag=1;
    var lastFlag=0;
    var strLength=gpsStr.length;
    var gpsDu=new Array();
    var gpsDir;
    var tempcount=0;
    var tempString="";
    var tempPointFlag=0;
    if (gpsStr[0] == 'w' || gpsStr[0] == 's') {
        flag = -1;
        lastFlag=0;
        gpsDir=gpsStr[0];
    } else if (gpsStr[strLength - 1] == 'w' || gpsStr[strLength - 1] == 's') {
        flag = -1;
        lastFlag=1;
        gpsDir=gpsStr[strLength - 1];
    }
    for(var i=0;i<=strLength;i++){
        if(gpsStr[i]>='0' && gpsStr[i]<='9') {
          tempString += gpsStr[i];
            continue;
        }else if(gpsStr[i]=='.'){
            tempStrArray[tempcount]=tempString;
            tempString="";
            tempcount++;
            tempStrArray[tempcount]='.';
            tempPointFlag=1;
            tempcount++;
        }else if(tempString.length>0){
            tempStrArray[tempcount]=tempString;
            tempString="";
            tempcount++;
        }
    }
    if(tempPointFlag==0){
        var num1=parseInt(tempStrArray[0],10);
        var num2=parseInt(tempStrArray[1],10);
        var num3=parseInt(tempStrArray[2],10);
        console.log(num1+'  '+num2/60+' '+num3/(60*60));
        gpsDu[1]=num1+num2/60+num3/(60*60);
        gpsDu[1]=gpsDu[1]*flag;
        gpsDu[0]=gpsDir;
    }else if (tempPointFlag==1){
        var num1=parseInt(tempStrArray[0],10);
        var num2=parseFloat(tempStrArray[1]+'.'+tempStrArray[3],10);
        gpsDu[1]=num1+num2/60;
        gpsDu[1]=gpsDu[1]*flag;
        gpsDu[0]=gpsDir;
    }
    return gpsDu;
}

function duToGpsDMS(duStr,duDir){
    duStr=duStr.toLowerCase();
    duStr=duStr.replace(/\s+/g,"");
    duDir=duDir.toUpperCase();
    var strLength=duStr.length;
    var tempString="";
    var tempStrArray=new Array();
    var tempCount=0;
    var tempPointFlag=0;
    var gpsDMS;
    for(var i=0;i<=strLength;i++){
        if(duStr[i]>='0' && duStr[i]<='9') {
            tempString += duStr[i];
            continue;
        }else if(duStr[i]=='.'){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
            tempStrArray[tempCount]='.';
            tempPointFlag=1;
            tempCount++;
        }else if(tempString.length>0){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
        }
    }
    if(tempPointFlag==1){
        var num1=tempStrArray[0];
        var num2=parseFloat('0'+tempStrArray[1]+ tempStrArray[2],10)*60;
        var num3=parseInt(parseFloat((num2-parseInt(num2,10))*60,10),10);
        num2=parseInt(num2,10);
        console.log(tempStrArray);
        console.log(num1+"   "+num2+"   "+num3+ " ");
        gpsDMS=duDir+" "+num1+"°"+num2+"′"+num3+"″";
        //gpsDMS=+num1+"°"+num2+"′"+num3+"″"+" "+duDir;
        // console.log(gpsDMS);
    }
    return gpsDMS;
}
function duToGpsDM(duStr,duDir){
    duStr=duStr.toLowerCase();
    duStr=duStr.replace(/\s+/g,"");
    duDir=duDir.toUpperCase();
    var strLength=duStr.length;
    var tempString="";
    var tempStrArray=new Array();
    var tempCount=0;
    var tempPointFlag=0;
    var gpsDM;
    for(var i=0;i<=strLength;i++){
        if(duStr[i]>='0' && duStr[i]<='9') {
            tempString += duStr[i];
            continue;
        }else if(duStr[i]=='.'){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
            tempStrArray[tempCount]='.';
            tempPointFlag=1;
            tempCount++;
        }else if(tempString.length>0){
            tempStrArray[tempCount]=tempString;
            tempString="";
            tempCount++;
        }
    }
    if(tempPointFlag==1){
        var num1=tempStrArray[0];
        var num2=parseFloat('0'+tempStrArray[1]+ tempStrArray[2],10)*60;
        gpsDM=duDir+" "+num1+"°"+num2+"′";
        //gpsDM=+num1+"°"+num2+"′"+" "+duDir;
        // console.log(gpsDM);
    }
    return gpsDM;
}
               </pre>
            </div>
        </div>
    </div>

<script>
    $(document).ready(function(){
        $('#gpsToDuBtn').click(function(){
            var str1=$('#gpsToDuInputId').val();
            $('#gpsToDuSpanId').text(gpsToDu(str1)[1]);
        });

        $('#duToDMSBtn').click(function(){
            var str1=$('#duToDMSInputId').val();
            var str2=$('#duToDMSSelectId').val();
            $('#duToDMSSpanId').text(duToGpsDMS(str1,str2));
        });

        $('#duToDMBtn').click(function(){
            var str1=$('#duToDMInputId').val();
            var str2=$('#duToDMSelectId').val();
            $('#duToDMSpanId').text(duToGpsDM(str1,str2));
        });

    });

//    var str1=" 39°55′44 ″ w";//d-m-s
//    var str2="39°55.733333333333′s";//d-m
//    var str3="-39.928888888888885 °";
//    var str3_1="w";
////    alert(gpsToDu(str2));
//    duToGpsDMS(str3,str3_1);
//    duToGpsDM(str3,str3_1);
</script>
</body>
</html>
部分效果图:

js将GPS坐标进行度分秒和度的转换


浏览 1307 评论 0 赞 0 砸 0 标签: 地图 javascript
评论
还可以再输入500个字

请您注意

·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在NoteShare上发表的作品,NoteShare有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款