//
|
// 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;
|
}
|
}
|