开发撞墙之奇怪的需求:度分秒格式动态转换

由于接触到GIS系统数据避免不了要处理经纬度的数据转换,有时候需要用户手动输入度分秒格式十分麻烦,就有了这个奇怪的需求

html:

<input type="radio" name="degreeConvert"  value="1" checked="checked">普通格式
<input type="radio" name="degreeConvert"  value="2">度分秒格式

Vue-mounted()

mounted: function () {
$('input:radio[name="degreeConvert"]').change(function(){
            if($(this).is(":checked")){
                if($(this).val() == '1'){
                    let newLon = DegreeConvertBack($("#Lon").val())+"°";
                    let newLat = DegreeConvertBack($("#Lat").val())+"°";
                    $("#Lon").val(newLon);
                    $("#Lat").val(newLat);
                }else{
                    let newLon = formatDegree($("#Lon").val().split("°")[0]);
                    let newLat = formatDegree($("#Lat").val().split("°")[0]);
                    $("#Lon").val(newLon);
                    $("#Lat").val(newLat);
                }
            }
        });
}

JS

//度分秒转为普通格式
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 Math.abs(du) + Number(((Math.abs(fen)/60) + (Math.abs(miao)/3600)).toFixed(6));
    //.toFixed()保留小数数位
}
//普通格式转为度分秒——注意这里普通格式是不带符号°的
function formatDegree(value) {
    value = Math.abs(value);
    var v1 = Math.floor(value);//度
    var v2 = Math.floor((value - v1) * 60);//分
    var v3 = Math.floor((((value - v1) * 60) - v2) * 60);//秒
    return v1 + '°' + v2 + '\'' + v3 + '"';
}

实际效果

  

其实还有点小问题,就是转换过程中小数精度计算导致难免会出现的偏差

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值