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