Created
November 22, 2024 13:50
-
-
Save michalpelka/e328a75d9bcfc0d07e99bf5191d50e5e to your computer and use it in GitHub Desktop.
PL2000ToWGS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cmake_minimum_required(VERSION 3.10) | |
project(WGS) | |
add_executable(main main.cpp wgs84_do_puwg92.cc) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <vector> | |
#include <array> | |
#include <iostream> | |
#include "wgs84_do_puwg92.h" | |
int main(void) | |
{ | |
std::vector<std::array<double, 3>> pl2000Points; | |
pl2000Points.push_back({629467.000000000000,491106.250000000000,104.379997253418}); | |
pl2000Points.push_back({630742.687500000000,490856.531250000000,107.050003051758}); | |
pl2000Points.push_back({630779.812500000000,490017.125000000000,107.419998168945}); | |
pl2000Points.push_back({629435.937500000000,490872.625000000000,105.099998474121}); | |
pl2000Points.push_back({630730.250000000000,490799.000000000000,107.040000915527}); | |
pl2000Points.push_back({629455.250000000000,491047.593750000000,104.389999389648}); | |
for (const auto& point : pl2000Points) | |
{ | |
double lat, lon; | |
puwg92_do_wgs84(point[1], point[0], &lat, &lon); | |
std::cout << lat << "," << lon << ", " << point[2] << std::endl; | |
} | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Autor: Zbigniew Szymanski | |
E-mail: [email protected] | |
Wersja: 1.1 | |
Historia zmian: | |
1.1 dodano przeksztalcenie odwrotne PUWG 1992 ->WGS84 | |
1.0 przeksztalcenie WGS84 -> PUWG 1992 | |
Data modyfikacji: 2012-11-27 | |
Uwagi: Oprogramowanie darmowe. Dozwolone jest wykorzystanie i modyfikacja | |
niniejszego oprogramowania do wlasnych celow pod warunkiem | |
pozostawienia wszystkich informacji z naglowka. W przypadku | |
wykorzystania niniejszego oprogramowania we wszelkich projektach | |
naukowo-badawczych, rozwojowych, wdrozeniowych i dydaktycznych prosze | |
o zacytowanie nastepujacego artykulu: | |
Zbigniew Szymanski, Stanislaw Jankowski, Jan Szczyrek, | |
"Reconstruction of environment model by using radar vector field histograms.", | |
Photonics Applications in Astronomy, Communications, Industry, and | |
High-Energy Physics Experiments 2012, Proc. of SPIE Vol. 8454, pp. 845422 - 1-8, | |
doi:10.1117/12.2001354 | |
Literatura: | |
Uriasz, J., �Wybrane odwzorowania kartograficzne�, Akademia Morska w Szczecinie, | |
http://uriasz.am.szczecin.pl/naw_bezp/odwzorowania.html | |
*/ | |
#include <math.h> | |
#include <complex> | |
using namespace std; | |
int wgs84_do_puwg92(double B_stopnie, double L_stopnie, double *Xpuwg, double *Ypuwg) | |
/* | |
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 | |
*/ | |
{ | |
// 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*M_PI/180.0; | |
double Bmax=56.0*M_PI/180.0; | |
double dLmin=-6.0*M_PI/180.0; | |
double dLmax=6.0*M_PI/180.0; | |
// Weryfikacja danych wejsciowych | |
double B=B_stopnie*M_PI/180.0; | |
double dL_stopnie=L_stopnie-L0_stopnie; | |
double dL=dL_stopnie*M_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*sin(B); | |
double V=1.0+e*sin(B); | |
double K=pow((U/V),(e/2.0)); | |
double C=K*tan(B/2.0+M_PI/4.0); | |
double fi=2.0*atan(C)-M_PI/2.0; | |
double d_lambda=dL; | |
// etap II - kula na walec | |
double p=sin(fi); | |
double q=cos(fi)*cos(d_lambda); | |
double r=1.0+cos(fi)*sin(d_lambda); | |
double s=1.0-cos(fi)*sin(d_lambda); | |
double XMERC=R0*atan(p/q); | |
double YMERC=0.5*R0*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; | |
} | |
int puwg92_do_wgs84(double Xpuwg, double Ypuwg, double *B_stopnie, double *L_stopnie) | |
/* | |
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 | |
*/ | |
{ | |
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; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef WGS84_DO_PUWG92_H | |
#define WGS84_DO_PUWG92_H | |
/* | |
Autor: Zbigniew Szymanski | |
E-mail: [email protected] | |
Wersja: 1.1 | |
Historia zmian: | |
1.1 dodano przeksztalcenie odwrotne PUWG 1992 ->WGS84 | |
1.0 przeksztalcenie WGS84 -> PUWG 1992 | |
Data modyfikacji: 2012-11-27 | |
Uwagi: Oprogramowanie darmowe. Dozwolone jest wykorzystanie i modyfikacja | |
niniejszego oprogramowania do wlasnych celow pod warunkiem | |
pozostawienia wszystkich informacji z naglowka. W przypadku | |
wykorzystania niniejszego oprogramowania we wszelkich projektach | |
naukowo-badawczych, rozwojowych, wdrozeniowych i dydaktycznych prosze | |
o zacytowanie nastepujacego artykulu: | |
Zbigniew Szymanski, Stanislaw Jankowski, Jan Szczyrek, | |
"Reconstruction of environment model by using radar vector field histograms.", | |
Photonics Applications in Astronomy, Communications, Industry, and | |
High-Energy Physics Experiments 2012, Proc. of SPIE Vol. 8454, pp. 845422 - 1-8, | |
doi:10.1117/12.2001354 | |
Literatura: | |
Uriasz, J., �Wybrane odwzorowania kartograficzne�, Akademia Morska w Szczecinie, | |
http://uriasz.am.szczecin.pl/naw_bezp/odwzorowania.html | |
*/ | |
int wgs84_do_puwg92(double B_stopnie, double L_stopnie, double *Xpuwg, double *Ypuwg); | |
/* | |
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 | |
*/ | |
int puwg92_do_wgs84(double Xpuwg, double Ypuwg, double *B_stopnie, double *L_stopnie); | |
/* | |
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 | |
*/ | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment