Ich bin gerade dabei meine Studienarbeit zu schreiben zum Thema: Anzeigen von frei verfügbaren Kartendaten in C++. Dabei geht es darum, eine Funktion zu schreiben, welche Koordinaten von ETRS89/UTM in Längen und Breitengraden im WGS84 Bezugssystem umzurechnen. Diese Funktion steht soweit und funktioniert, doch da ich einen wissenschaftlichen Verweis auf die Formel brauche, brauche ich eure Hilfe. Ich habe die Formel von einer Exceltabelle aufgeschrieben, doch nirgendwo wird diese erklärt. Seit mehreren Tagen sitze ich dran, eine Quelle zu finden, wo diese erklärt wird, doch ich finde nichts dazu. Vielleicht kann mir ja einer weiterhelfen.
Link zur Exceltabelle: https://www.xrouten.de/blog/utm-koordinaten-umrechnen
Formel in C++ Code:
static const double PI = 3.141592653589793238462643383279;
const int iaSemiMajorAxis = 6378137; //große Halbachse a
const double dbSemiMinorAxis = 6356752.31424518;
const double de = sqrt(pow(iaSemiMajorAxis, 2) - pow(dbSemiMinorAxis, 2)) / dbSemiMinorAxis;
const double de2 = pow(de, 2);
const double dc = (pow(iaSemiMajorAxis, 2) / dbSemiMinorAxis);
const double dEcc = sqrt(pow(iaSemiMajorAxis, 2) - pow(dbSemiMinorAxis, 2)) / iaSemiMajorAxis;
double dFi = dNorth / (6366197.724 * 0.9996); //0,9996 ist die Längenverzerrung des Mittelmeridians
double dA1 = sin(2 * dFi);
double dA2 = dA1 * pow(cos(dFi), 2);
double dJ2 = (dFi + (dA1 / 2));
double dJ4 = (3 * dJ2 + dA2) / 4;
double dJ6 = (5 * dJ4 + dA2 * pow(cos(dFi), 2)) / 3;
double dAlpha = de2 * (3.0 / 4.0) ;
double dBeta = (5.0 / 3.0) * pow(dAlpha, 2);
double dGamma = (35.0 / 27.0) * pow(dAlpha, 3);
double dBFi = 0.9996 * dc * (dFi - (dAlpha * dJ2) + (dBeta * dJ4) - (dGamma * dJ6));
double dNi = (dc / sqrt(1 + de2 * pow(cos(dFi), 2))) * 0.9996;
double dB = (dNorth - dBFi) / dNi;
double dA = (dEast - 500000.0) / dNi;
double dZeta = ((de2 * pow(dA, 2)) / 2) * pow(cos(dFi), 2);
double dEta = dB * (1.0 - dZeta) + dFi;
double dXi = dA * (1.0 - (dZeta / 3));
double dSenhXi = (exp(dXi) - exp(-dXi)) / 2; //Exp: Exponentialfunktion e
double dDelLamb = atan(dSenhXi / cos(dEta));
double dTau = atan(cos(dDelLamb) * tan(dEta));
double dFiRad = dFi + (1 + de2 * pow(cos(dFi), 2) - (3.0 / 2) * de2 * sin(dFi) * cos(dFi) * (dTau - dFi)) * (dTau - dFi);
//Longitude-Formel
dLat = (dFiRad / PI) * 180;
//Latitude-Formel
int iMerCentr = 6 * iZone - 183;
dLon = (dDelLamb / PI) * 180 + iMerCentr;
vielleicht kann mir ja einer Helfen, diese zu erklären + eine Quelle mit anzugeben.
Danke im Voraus :)