经纬度格式转换-(互转 度转度分秒 度分秒转度……)

经纬度格式分为三种

 度:              ( ddd.ddddd °)                 十进制小数部分(5位)                百度地图,谷歌地图,手机自带gps经纬度输出

度 . 分 :       (ddd°mm.mmm’ )             十进制小数部分(3位)               GPGGA

度 . 分 . 秒 :(ddd°mm’ss’’)                                                                              谷歌地图

关系:

一度(°)等于60分钟(’)等于3600秒(“):

整度(d)等于十进制的度的整数部分(dd):

分钟(m)等于十进制的度的整数部分(dd)减去整数度(d)的60倍:

秒(s)等于十进制的度(dd)减去整数度(d)减分(M)除以60乘以3600:

经纬度代表的实际距离:

    经度1度 ≈111.13km 
    经度1分 ≈1.852km 
    经度1秒 ≈30.9m 

    纬度1度 ≈ 111.31km  
 纬度1分 ≈ 1.855km  
 纬度1秒 ≈30.9m 

度→度分秒:

lon= 104.07167°

度 = 104°

分 = 0.07167 *60 =4.3002(取整) = 4’

秒 = 0.3002 *60 =18.012(保留8位,保留越多越精准,但位置信息已经够精确了) =18.012’’

转换后 lon = 104°4’18.012’’

 public static String D2Dms(double d_data){
        int d = (int)d_data;
        int m = (int)((d_data-d)*60);
        double s = keep8Decimal(((d_data-d)*60-m)*60);
        return  d+"°"+m+"′"+s+"″";
    }

度分秒→度:

lon=104°4’18.012’’

度 = 104+4/60+18.012/60/60 = 104.07167°(保留8位)

转换后 lon =104.07167°

   public static double Dms2D(String dms_data) {
        if (!dms_data.contains("°")||!dms_data.contains("′")||!dms_data.contains("″"))
            return 0;
        double d = Double.parseDouble(dms_data.split("°")[0]);
        double m = Double.parseDouble(dms_data.split("°")[1].split("′")[0]);
        double s =Double.parseDouble(dms_data.split("°")[1].split("′")[1].replace("″", ""));
        return keep8Decimal(d+m/60+s/60/60);
    }

 度→度分:

lon= 104.07167°

度 = 104°

分 = 0.07167 *60 =4.3002(保留3位) = 4.3’

转换后 lon = 104°4.3’

    public static String D2Dm(double d_data){
        int d = (int)d_data;
        double m = keep3Decimal((d_data-d)*60);
        return  d+"°"+m+"′";
    }

度分→度:

lon=104°4.3’

度 = 104+4.3/60 = 104.07167°(保留8位)

转换后 lon =104.07167°

   public static double Dm2D(String dms_data) {
        if (!dms_data.contains("°")||!dms_data.contains("′"))
            return 0;
        double d = Double.parseDouble(dms_data.split("°")[0]);
        double m = Double.parseDouble(dms_data.split("°")[1].split("′")[0]);
        return keep8Decimal(d+m/60);
    }

使用的其他方法:

    //保留8位小数
    public static double keep8Decimal(double d){
        BigDecimal bd=new BigDecimal(d);
        double d1=bd.setScale(8,BigDecimal.ROUND_HALF_UP).doubleValue();
        return d1;
    }
    //保留3位小数
    public static double keep3Decimal(double d){
        BigDecimal bd=new BigDecimal(d);
        double d1=bd.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
        return d1;
    }

  • 28
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值