Informatik

3.901 Fragen
Formel für Umrechnung von UTM Koordinaten in Längen- und Breitengrade?

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 :)

Ask Me Anything: Blickwechsel

Du stellst die Fragen, ein außergewöhnlicher Nutzer antwortet! Begegne mit Deinen Fragen anderen Menschen hautnah und persönlich.

Ask Me Anything: Themenspecials

Im gutefrage Themenspecial beantworten Verbände, Organisationen und Personen des öffentlichen Lebens Deine Fragen zu aktuellen Themen.