经纬度与小数的互相转化

时间:2023-01-12 19:51:46
 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