java经纬度转换小数_java经纬度格式转换

在数学中,表示角度的度、分、秒分别使用°、′、″符号进行表示。

1°=60′,1′=60″ ,1°=3600″。

由上述可知度分秒转换度的计算公式为:(dd°mm′ss″) dd+mm/60+ss/3600

如:

113°30′10.25″ = 113+30/60+10.25/3600 ≈113.502847

度分秒转度

/**

* 经纬度转换 ,度分秒转度

* @param str

* @author Cai_YF

* @return

*/

public static String Dms2D(String jwd){

if(StringUtil.isNotEmpty(jwd)&&(jwd.contains("°"))){//如果不为空并且存在度单位

//计算前进行数据处理

jwd = jwd.replace("E", "").replace("N", "").replace(":", "").replace(":", "");

double d=0,m=0,s=0;

d = Double.parseDouble(jwd.split("°")[0]);

//不同单位的分,可扩展

if(jwd.contains("′")){//正常的′

m = Double.parseDouble(jwd.split("°")[1].split("′")[0]);

}else if(jwd.contains("'")){//特殊的'

m = Double.parseDouble(jwd.split("°")[1].split("'")[0]);

}

//不同单位的秒,可扩展

if(jwd.contains("″")){//正常的″

//有时候没有分 如:112°10.25″

s = jwd.contains("′")?Double.parseDouble(jwd.split("′")[1].split("″")[0]):Double.parseDouble(jwd.split("°")[1].split("″")[0]);

}else if(jwd.contains("''")){//特殊的''

//有时候没有分 如:112°10.25''

s = jwd.contains("'")?Double.parseDouble(jwd.split("'")[1].split("''")[0]):Double.parseDouble(jwd.split("°")[1].split("''")[0]);

}

jwd = String.valueOf(d+m/60+s/60/60);//计算并转换为string

//使用BigDecimal进行加减乘除

/*BigDecimal bd = new BigDecimal("60");

BigDecimal d = new BigDecimal(jwd.contains("°")?jwd.split("°")[0]:"0");

BigDecimal m = new BigDecimal(jwd.contains("′")?jwd.split("°")[1].split("′")[0]:"0");

BigDecimal s = new BigDecimal(jwd.contains("″")?jwd.split("′")[1].split("″")[0]:"0");

//divide相除可能会报错(无限循环小数),要设置保留小数点

jwd = String.valueOf(d.add(m.divide(bd,6,BigDecimal.ROUND_HALF_UP)

.add(s.divide(bd.multiply(bd),6,BigDecimal.ROUND_HALF_UP))));*/

}

return jwd;

}

运行结果

72e5ff00a03718ed6fc94ca56661f44a.png

度分转度

/**

* 十进制经纬度转换 ddd°mm.mmmm 转 ddd.ddddd°

* 如:112°30.4128 = 112.50688

* @param str

* @author Cai_YF

* @return

*/

public static String DmTurnD(String jwd){

if(StringUtil.isNotEmpty(jwd)&&(jwd.contains("°"))){//如果不为空并且存在度单位

double d=0,m=0;

d = Double.parseDouble(jwd.split("°")[0]);

m = Double.parseDouble(jwd.split("°")[1])/60;

jwd = String.valueOf(d+m);

}

return jwd;

}

运行结果

97053a2a1a7e458486aff2bbef7b16ad.png

有待完善。。。!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值