Działa konwersja nmt dla asc i xyz.
This commit is contained in:
158
src/main/java/pl/wat/ms4ds/terrain/CoordConversion.java
Normal file
158
src/main/java/pl/wat/ms4ds/terrain/CoordConversion.java
Normal file
@@ -0,0 +1,158 @@
|
||||
package pl.wat.ms4ds.terrain;
|
||||
|
||||
public class CoordConversion {
|
||||
|
||||
/*
|
||||
Opis:
|
||||
konwersja wspolrzednych z ukladu WGS 84 do ukladu PUWG 1992
|
||||
Parametry:
|
||||
B_stopnie - szerokosc geograficzna wyrazona w stopniach
|
||||
L_stopnie - dlugosc geograficzna wyrazona w stopniach
|
||||
Xpuwg - wskazanie na wspolrzedna X ukladu PUWG 1992 (UWAGA - wspolrzedna pionowa)
|
||||
Ypuwg - wskazanie na wspolrzedna Y ukladu PUWG 1992 (UWAGA - wspolrzedna pozioma)
|
||||
Zwracana wartosc:
|
||||
0 - konwersja powiodla sie
|
||||
1 - szerokosc geograficzna B poza zakresem
|
||||
2 - dlugosc geograficzna L poza zakresem
|
||||
*/
|
||||
public static int wgs84ToPuwg1992(double B_stopnie, double L_stopnie) {
|
||||
double Xpuwg;
|
||||
double Ypuwg;
|
||||
// Parametry elipsoidy GRS-80
|
||||
double e = 0.0818191910428; //pierwszymimo¶ród elipsoidy
|
||||
double R0 = 6367449.14577; //promieñ sfery Lagrange.a
|
||||
double Snorm = 2.0E-6; //parametr normuj±cy
|
||||
double xo = 5760000.0; //parametr centruj±cy
|
||||
|
||||
//Wspolczynniki wielomianu
|
||||
double a0 = 5765181.11148097;
|
||||
double a1 = 499800.81713800;
|
||||
double a2 = -63.81145283;
|
||||
double a3 = 0.83537915;
|
||||
double a4 = 0.13046891;
|
||||
double a5 = -0.00111138;
|
||||
double a6 = -0.00010504;
|
||||
|
||||
// Parametry odwzorowania Gaussa-Kruegera dla uk³adu PUWG92
|
||||
double L0_stopnie = 19.0; //Pocz±tek uk³adu wsp. PUWG92 (d³ugo¶æ)
|
||||
double m0 = 0.9993;
|
||||
double x0 = -5300000.0;
|
||||
double y0 = 500000.0;
|
||||
|
||||
// Zakres stosowalnosci metody
|
||||
double Bmin = 48.0 * Math.PI / 180.0;
|
||||
double Bmax = 56.0 * Math.PI / 180.0;
|
||||
double dLmin = -6.0 * Math.PI / 180.0;
|
||||
double dLmax = 6.0 * Math.PI / 180.0;
|
||||
|
||||
// Weryfikacja danych wejsciowych
|
||||
double B = B_stopnie * Math.PI / 180.0;
|
||||
double dL_stopnie = L_stopnie - L0_stopnie;
|
||||
double dL = dL_stopnie * Math.PI / 180.0;
|
||||
|
||||
if ((B < Bmin) || (B > Bmax))
|
||||
return 1;
|
||||
|
||||
if ((dL < dLmin) || (dL > dLmax))
|
||||
return 2;
|
||||
|
||||
//etap I - elipsoida na kulê
|
||||
double U = 1.0 - e * Math.sin(B);
|
||||
double V = 1.0 + e * Math.sin(B);
|
||||
double K = Math.pow((U / V), (e / 2.0));
|
||||
double C = K * Math.tan(B / 2.0 + Math.PI / 4.0);
|
||||
double fi = 2.0 * Math.atan(C) - Math.PI / 2.0;
|
||||
double d_lambda = dL;
|
||||
|
||||
// etap II - kula na walec
|
||||
double p = Math.sin(fi);
|
||||
double q = Math.cos(fi) * Math.cos(d_lambda);
|
||||
double r = 1.0 + Math.cos(fi) * Math.sin(d_lambda);
|
||||
double s = 1.0 - Math.cos(fi) * Math.sin(d_lambda);
|
||||
double XMERC = R0 * Math.atan(p / q);
|
||||
double YMERC = 0.5 * R0 * Math.log(r / s);
|
||||
|
||||
// //etap III - walec na p³aszczyznê
|
||||
// complex<double> Z ((XMERC - xo) * Snorm, YMERC * Snorm);
|
||||
// complex<double> Zgk;
|
||||
// Zgk = a0 + Z * (a1 + Z * (a2 + Z * (a3 + Z * (a4 + Z * (a5 + Z * a6)))));
|
||||
// double Xgk = Zgk.real();
|
||||
// double Ygk = Zgk.imag();
|
||||
//
|
||||
// //Przej¶cie do uk³adu aplikacyjnego
|
||||
// Xpuwg = m0 * Xgk + x0;
|
||||
// Ypuwg = m0 * Ygk + y0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Opis:
|
||||
konwersja wspolrzednych z ukladu PUWG 1992 do ukladu WGS 84
|
||||
Parametry:
|
||||
Xpuwg - wskazanie na wspolrzedna X ukladu PUWG 1992 (UWAGA - wspolrzedna pionowa)
|
||||
Ypuwg - wskazanie na wspolrzedna Y ukladu PUWG 1992 (UWAGA - wspolrzedna pozioma)
|
||||
B_stopnie - szerokosc geograficzna wyrazona w stopniach
|
||||
L_stopnie - dlugosc geograficzna wyrazona w stopniach
|
||||
Zwracana wartosc:
|
||||
0 - konwersja powiodla sie
|
||||
*/
|
||||
public static int puwg1992ToWgs84(double Xpuwg, double Ypuwg, double B_stopnie, double L_stopnie) {
|
||||
double L0_stopnie = 19.0; //Pocz±tek uk³adu wsp. PUWG92 (d³ugo¶æ)
|
||||
double m0 = 0.9993;
|
||||
double x0 = -5300000.0;
|
||||
double y0 = 500000.0;
|
||||
|
||||
double R0 = 6367449.14577; //promieñ sfery Lagrange.a
|
||||
double Snorm = 2.0E-6; //parametr normuj±cy
|
||||
double xo_prim = 5765181.11148097; //parametr centruj±cy
|
||||
|
||||
// Wspolczynniki wielomianu
|
||||
double b0 = 5760000;
|
||||
double b1 = 500199.26224125;
|
||||
double b2 = 63.88777449;
|
||||
double b3 = -0.82039170;
|
||||
double b4 = -0.13125817;
|
||||
double b5 = 0.00101782;
|
||||
double b6 = 0.00010778;
|
||||
|
||||
// Wspolczynniki szeregu tryg.
|
||||
double c2 = 0.0033565514856;
|
||||
double c4 = 0.0000065718731;
|
||||
double c6 = 0.0000000176466;
|
||||
double c8 = 0.0000000000540;
|
||||
|
||||
//Przejscie z ukladu aplikacyjnego
|
||||
double Xgk, Ygk;
|
||||
Xgk = (Xpuwg - x0) / m0;
|
||||
Ygk = (Ypuwg - y0) / m0;
|
||||
|
||||
// //etap I - (Xgk, Ygk) -> (Xmerc, Ymerc)
|
||||
// complex<double> Z ((Xgk - xo_prim) * Snorm, Ygk * Snorm);
|
||||
// complex<double> Zmerc;
|
||||
//
|
||||
// Zmerc = b0 + Z * (b1 + Z * (b2 + Z * (b3 + Z * (b4 + Z * (b5 + Z * b6)))));
|
||||
//
|
||||
// double Xmerc = Zmerc.real();
|
||||
// double Ymerc = Zmerc.imag();
|
||||
//
|
||||
// //etap II - Xmerc,Ymerc -> fi, delta_lambda
|
||||
// double alfa = Xmerc / R0;
|
||||
// double beta = Ymerc / R0;
|
||||
//
|
||||
// double w = 2.0 * atan(exp(beta)) - M_PI / 2.0;
|
||||
// double fi = asin(cos(w) * sin(alfa));
|
||||
// double d_lambda = atan(tan(w) / cos(alfa));
|
||||
//
|
||||
// //etap III
|
||||
// double B = fi + c2 * sin(2.0 * fi) + c4 * sin(4.0 * fi) + c6 * sin(6.0 * fi) + c8 * sin(8.0 * fi);
|
||||
// double dL = d_lambda;
|
||||
//
|
||||
// //Obliczenia koncowe
|
||||
// *B_stopnie = B / M_PI * 180.0;
|
||||
// double dL_stopnie = dL / M_PI * 180.0;
|
||||
// *L_stopnie = dL_stopnie + L0_stopnie;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user