zsh_root
2024-01-02 7b595546af704983dbafcd0d385c8768ddacefc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package urt;
 
public class xytognss {
    /**µØÇò³àµÀ°ë¾¶(km)*/
    static double EARTH_RADIUS = 6378.137;
 
    /**µØÇòÿ¶ÈµÄ»¡³¤(km)*/
    public final static double EARTH_ARC=111.199;
 
    /**ת»¯Îª»¡¶È(rad)*/
    public static double rad(double d) {
        return  d*Math.PI/180.0;
 
    }
 
    /**
     *ÇóÒ»¸öBµãxy×ø±êתΪ¾­Î³¶È 
     *Aµãlng1 ¾­¶È
     *Aµãlat1 Î³¶È
     *x0Ô­µãµÄ×ø±êx
     *y0Ô­µã×ø±êy
     *BµãµÄx×ø±ê
     *BµãµÄy×ø±ê
     *ABµÄ¼Ð½Çazimuth
     * */
    public static String[] ConvertDistanceToLogLat(
            String lng2, 
            String lat2,
            String x0,
            String y0,
            String x,
            String  y, 
            String azimuth1) {
        String[] jwd=new String[2];        
        double xA=Double.parseDouble(x0);
        double yA=Double.parseDouble(y0);        
        double xB=Double.parseDouble(x);
        double yB=Double.parseDouble(y);
        double lng1=Double.parseDouble(lng2);
        double lat1=Double.parseDouble(lat2);
        double azimuth=Double.parseDouble(azimuth1);    
 
        double distance_cm=Math.sqrt((xB-xA)*(xB-xA)+(yB-yA)*(yB-yA));
        double distance=distance_cm/100;
 
        double m2km = 1.0/1000;
 
        //¶È·Öת¶È
        double lat0_deg = GnssToXY.ublox_dm2d(lat1);
        double lng0_deg = GnssToXY.ublox_dm2d(lng1);
 
        double dtheta=Math.atan2(yB-yA, xB-xA);        
 
        azimuth = rad(azimuth);
 
        double theta1 = azimuth+ dtheta;
 
        // ½«¾àÀëת»»³É¾­¶ÈµÄ¼ÆË㹫ʽ
 
        double lon = lng0_deg + (distance * Math.sin(theta1))*m2km/ (EARTH_ARC * Math.cos(rad(lat0_deg)));
 
 
        // ½«¾àÀëת»»³Éγ¶ÈµÄ¼ÆË㹫ʽ
        double lat = lat0_deg + (distance * Math.cos(theta1))*m2km/ EARTH_ARC;
 
        jwd[0] =String .format("%.6f",ublox_d2dm(lon));
        jwd[1] = String .format("%.6f",ublox_d2dm(lat));
        return jwd;
    }
 
 
    /**¶Èת¶È·Ö*/
    public  static double ublox_d2dm(double deg) {
        double deg0 =Math.floor(deg);
        double ddeg = deg-deg0;
        double m = ddeg*60;
        double ddmm = deg0*100+m;        
        return ddmm;
    }
 
    /**¾­Î³¶È¶È·ÖתΪ¶ÈÊä³ö*/
    public static String jwdzd(String gps_weidu,String gsp_jingdu) {
        double wdd=Double.parseDouble(gps_weidu);
        double jdd=Double.parseDouble(gsp_jingdu);
        double jdj=GnssToXY.ublox_dm2d(jdd);
        double wdw=GnssToXY.ublox_dm2d(wdd);
        String jd=String .format("%.6f",jdj);
        String wd=String .format("%.6f",wdw);
        String mes="¾­¶È£»Î³¶È£º"+jd+";"+wd;
        return mes;
    }
 
    /**¾­Î³¶È¶È·Öת¶È*/
    public static String[] dd2d(String gps_weidu,String gsp_jingdu) {
        String[] jwd=new String[2];
        double wdd=Double.parseDouble(gps_weidu);
        double jdd=Double.parseDouble(gsp_jingdu);
        double jdj=GnssToXY.ublox_dm2d(jdd);
        double wdw=GnssToXY.ublox_dm2d(wdd);
        jwd[0]=String .format("%.6f",jdj);
        jwd[1]=String .format("%.6f",wdw);        
        return jwd;
        
    }
    
    /**¾­Î³¶È¶È·Öת¶ÈdoubleÊä³ö
     * retrun ¾­¶È£¬Î³¶È*/
    public static double[] dd2d_double(String gps_weidu,String gsp_jingdu) {
        double[] jwd=new double[2];
        double wdd=Double.parseDouble(gps_weidu);
        double jdd=Double.parseDouble(gsp_jingdu);
        jwd[0]=GnssToXY.ublox_dm2d(jdd);
        jwd[1]=GnssToXY.ublox_dm2d(wdd);
        return jwd;
        
    }
    
}