首页 > 代码库 > 经纬度与小数的互相转化

经纬度与小数的互相转化

 1 import java.math.BigDecimal; 2   3 public class ConvertLatlng { 4   5 //经纬度度分秒转换为小数 6 public double convertToDecimal(double du,double fen,double miao){ 7 if(du<0) 8 return -(Math.abs(du)+(Math.abs(fen)+(Math.abs(miao)/60))/60); 9  10 return Math.abs(du)+(Math.abs(fen)+(Math.abs(miao)/60))/60;11  12 }13 //以字符串形式输入经纬度的转换14 public double convertToDecimalByString(String latlng){15  16 double du=Double.parseDouble(latlng.substring(0, latlng.indexOf("°")));17 double fen=Double.parseDouble(latlng.substring(latlng.indexOf("°")+1, latlng.indexOf("′")));18 double miao=Double.parseDouble(latlng.substring(latlng.indexOf("′")+1, latlng.indexOf("″")));19 if(du<0)20 return -(Math.abs(du)+(fen+(miao/60))/60);21 return du+(fen+(miao/60))/60;22  23 }24  25 //将小数转换为度分秒26 public String convertToSexagesimal(double num){27  28 int du=(int)Math.floor(Math.abs(num));    //获取整数部分(度)29 double temp=getdPoint(Math.abs(num))*60;30 int fen=(int)Math.floor(temp); //获取整数部分(分)31 double miao=getdPoint(temp)*60;32 if(num<0)33 return "-"+du+"°"+fen+"′"+miao+"″";34  35 return du+"°"+fen+"′"+miao+"″";36  37 }38 //获取小数部分39 public double getdPoint(double num){40 double d = num;41 int fInt = (int) d;42 BigDecimal b1 = new BigDecimal(Double.toString(d));43 BigDecimal b2 = new BigDecimal(Integer.toString(fInt));44 double dPoint = b1.subtract(b2).floatValue();45 return dPoint;46 }47  48 public static void main(String[] args) {49  50 ConvertLatlng convert=new ConvertLatlng();51 double latlng1=convert.convertToDecimal(37, 25, 19.222);52 double latlng2=convert.convertToDecimalByString("-37°25′19.222″");53 String latlng3=convert.convertToSexagesimal(121.084095);54 String latlng4=convert.convertToSexagesimal(-121.084095);55  56 System.out.println("转换小数(数字参数)"+latlng1);57 System.out.println("转换小数(字符串参数)"+latlng2);58 System.out.println("转换度分秒:"+latlng3);59 System.out.println("转换度分秒:"+latlng4);60  61 }62  63 }64  

 

经纬度与小数的互相转化