计算经纬度页面后端springboot代码
王飞
2025-01-23 584633e45c9a93119f17fcf93cb1d9de07286ce0
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
 
package com.jisuan.util;
 
import java.text.DecimalFormat;
 
public class Gnss2xy {
    static double a = 6378.137;
    static double e = 0.0818192;
    static double k0 = 0.9996;
    static double e2;
    static double e4;
    static double e6;
    static double E0;
    static double N0;
    static double lat_a;
    static double lon_a;
    static double lon_b;
    static double lat_b;
    static double xa;
    static double ya;
    static double xb;
    static double yb;
    static int k;
    static int sizes;
    static DecimalFormat df;
    static int baoxu;
 
    public Gnss2xy() {
    }
 
    public static String[] gps_xy(String[] A, String[] B, String jd1, String wd1) {
        double lon_a1 = Double.parseDouble(A[0]);
        double lat_a1 = Double.parseDouble(A[1]);
        double xa1 = 0.0;
        double ya1 = 0.0;
        int size2 = A.length;
        if (size2 == 4) {
            xa1 = Double.parseDouble(A[2]);
            ya1 = Double.parseDouble(A[3]);
        }
 
        double lon_b1 = Double.parseDouble(B[0]);
        double lat_b1 = Double.parseDouble(B[1]);
        double xb1 = Double.parseDouble(B[2]);
        double yb1 = Double.parseDouble(B[3]);
        double lat = Double.parseDouble(wd1);
        double lon = Double.parseDouble(jd1);
        String[] realxy = new String[2];
        double[] xycs = initiize_ublox_AB(lat_a1, lon_a1, lat_b1, lon_b1, xb1, yb1);
        if (size2 == 4) {
            xycs = initiize_ublox_AB2(lat_a1, lon_a1, lat_b1, lon_b1, xa1, ya1, xb1, yb1);
        }
 
        double x0 = xycs[0];
        double y0 = xycs[1];
        double c = xycs[2];
        double s = xycs[3];
        double[] xy = new double[2];
        double x = ubloxraw2xy(lat, lon)[0] - x0;
        double y = ubloxraw2xy(lat, lon)[1] - y0;
        xy[0] = c * x - s * y;
        xy[1] = s * x + c * y;
        double x1 = xy[1] * 100.0;
        double y1 = xy[0] * 100.0;
        realxy[0] = String.valueOf((int)x1);
        realxy[1] = String.valueOf((int)y1);
        return realxy;
    }
 
    public static double[] initiize_ublox_AB(double lat0, double lon0, double latB, double lonB, double xB, double yB) {
        double[] xycstf = new double[6];
        double[] a = ubloxraw2xy(lat0, lon0);
        double[] b = ubloxraw2xy(latB, lonB);
        double[] ab = new double[]{b[0] - a[0], b[1] - a[1]};
        double the = Math.atan2(ab[0], ab[1]);
        double thp = Math.atan2(yB, xB);
        double th = the - thp;
        double c = Math.cos(th);
        double s = Math.sin(th);
        double th_deg = th * 180.0 / Math.PI;
        xycstf[0] = a[0];
        xycstf[1] = a[1];
        xycstf[2] = c;
        xycstf[3] = s;
        xycstf[4] = th_deg;
        xycstf[5] = a[2];
        return xycstf;
    }
 
    public static double[] initiize_ublox_AB2(double lat0, double lon0, double latB, double lonB, double xA1, double yA1, double xB1, double yB1) {
        double xA = xA1 / 100.0;
        double yA = yA1 / 100.0;
        double xB = xB1 / 100.0;
        double yB = yB1 / 100.0;
        double[] xycstf = new double[6];
        double[] a = ubloxraw2xy(lat0, lon0);
        double[] b = ubloxraw2xy(latB, lonB);
        double[] ab = new double[]{b[0] - a[0], b[1] - a[1]};
        double[] AB = new double[]{xB - xA, yB - yA};
        double the = Math.atan2(ab[0], ab[1]);
        double thp = Math.atan2(AB[1], AB[0]);
        double th = the - thp;
        double c = Math.cos(th);
        double s = Math.sin(th);
        double th_deg = th * 180.0 / Math.PI;
        double xap = c * yA + s * xA;
        double yap = -s * yA + c * xA;
        xycstf[0] = a[0] - xap;
        xycstf[1] = a[1] - yap;
        xycstf[2] = c;
        xycstf[3] = s;
        xycstf[4] = th_deg;
        xycstf[5] = a[2];
        return xycstf;
    }
 
    public static double[] ubloxraw2xy(double lat, double lon) {
        double[] xy = new double[3];
        double lond = ublox_dm2d(lon);
        double latd = ublox_dm2d(lat);
        double[] dxy = utm(latd, lond);
        xy[0] = dxy[0] * 1000.0;
        xy[1] = dxy[1] * 1000.0;
        xy[2] = dxy[2];
        return xy;
    }
 
    public static double ublox_d2dm(String deg1) {
        try {
            double deg = Double.parseDouble(deg1);
            double deg0 = Math.floor(deg);
            double ddeg = deg - deg0;
            double m = ddeg * 60.0;
            double ddmm = deg0 * 100.0 + m;
            return ddmm;
        } catch (NumberFormatException var11) {
            return 0.0;
        }
    }
 
    public static double ublox_dm2d(double ddmm_dot_m) {
        double d0 = Math.floor(ddmm_dot_m / 100.0);
        double d = d0 + (ddmm_dot_m - d0 * 100.0) / 60.0;
        return d;
    }
 
    public static double[] utm(double lat, double lon) {
        double[] dxy = new double[3];
        double zonenum1 = lon / 6.0;
        if (zonenum1 > 0.0) {
            zonenum1 = Math.floor(zonenum1);
        } else {
            zonenum1 = Math.ceil(zonenum1);
        }
 
        double Zonenum = zonenum1 + 31.0;
        double lambda0 = ((Zonenum - 1.0) * 6.0 - 180.0 + 3.0) * Math.PI / 180.0;
        double phi = lat * Math.PI / 180.0;
        double lambda = lon * Math.PI / 180.0;
        double v = 1.0 / Math.sqrt(1.0 - e2 * Math.pow(Math.sin(phi), 2.0));
        double A = (lambda - lambda0) * Math.cos(phi);
        double A2 = A * A;
        double A3 = A2 * A;
        double A4 = A3 * A;
        double A5 = A4 * A;
        double A6 = A5 * A;
        double T = Math.tan(phi) * Math.tan(phi);
        double T2 = T * T;
        double C = e2 * Math.cos(phi) * Math.cos(phi) / (1.0 - e2);
        double C2 = C * C;
        double s = (1.0 - e2 / 4.0 - 3.0 * e4 / 64.0 - 5.0 * e6 / 256.0) * phi - (3.0 * e2 / 8.0 + 3.0 * e4 / 32.0 + 45.0 * e6 / 1024.0) * Math.sin(2.0 * phi) + (15.0 * e4 / 256.0 + 45.0 * e6 / 1024.0) * Math.sin(4.0 * phi) - 35.0 * e6 / 3072.0 * Math.sin(6.0 * phi);
        dxy[0] = E0 + k0 * a * v * (A + (1.0 - T + C) * A3 / 6.0 + (5.0 - 18.0 * T + T2) * A5 / 120.0);
        dxy[1] = N0 + k0 * a * (s + v * Math.tan(phi) * (A2 / 2.0 + (5.0 - T + 9.0 * C + 4.0 * C2) * A4 / 24.0 + (61.0 - 58.0 * T + T2) * A6 / 720.0));
        dxy[2] = Zonenum;
        return dxy;
    }
 
    static {
        e2 = e * e;
        e4 = e2 * e2;
        e6 = e4 * e2;
        E0 = 500.0;
        N0 = 0.0;
        lat_a = 0.0;
        lon_a = 0.0;
        lon_b = 0.0;
        lat_b = 0.0;
        xa = 0.0;
        ya = 0.0;
        xb = 0.0;
        yb = 0.0;
        k = 0;
        sizes = 2;
        df = new DecimalFormat("0.0000000");
        baoxu = 1;
    }
}