GK-Koordinaten in Länge und Breite umrechnen in C# (Geodäsie/Vermessung)

Daniel_1983, Saturday, 12.03.2011, 22:31 (vor 5007 Tagen) @ Thomas

Hallo zusammen
ich bin neu und entschuld mich wenn ich noch Fragen stelle die für viele selbstverständlich sind.

Ich benötige ein kleines Programm das mir GK-Koordinaten in Länge und Breite umrechnet.
habe in meinen alten Unterlagen noch ein paar Formeln gefunden und diese auch umgesetzt jedoch komme ich nicht auf die richtige Ergebnisse. Vielleicht kann mir jemand da weiter helfen. Ich bin auch für andere Lösungen offen. es ist schon ein bisschen her als ich damit aktiv zu tun hatte.

Mein Code bis jetzt

private MyPunkt2D berechnung(double x, double y)
        {
            string breite= "";
            string länge= "";
            double roh = 180 / Math.PI;
        // Besselellipsoid
            double halbachse = 6377397.155;     // große Halbachse in Meter
            double f = 1/299.152813;            // Abplattung
            double lh = 9;                  // Hauptmeridian
            double mh = 1;
   // start Berechnungen
        // Vorberechnungen
            double g = x / mh;
            double b = halbachse - (f - halbachse);
            double e2 = (Math.Pow  (halbachse,2) - Math.Pow(b,2)) / (Math.Pow(halbachse,2));
            double e_strich = Math.Sqrt((Math.Pow(halbachse,2) - Math.Pow(b,2)) / (Math.Pow(b,2)));
            double c = Math.Pow(halbachse,2) / b;
 
            double e0 = c * (1 - 3 / 4 * Math.Pow(e_strich, 2) + 45 / 64 * Math.Pow(e_strich, 4) - 175 / 256 * Math.Pow(e_strich, 6) + 11025 / 16384 * Math.Pow(e_strich, 8));
            double f2 = 3 / 8 * Math.Pow(e_strich, 2) - 3 / 16 * Math.Pow(e_strich, 4) + 213 / 2048 * Math.Pow(e_strich, 6);
            double f4 = 21 / 256 * Math.Pow(e_strich, 4) - 21 / 256 * Math.Pow(e_strich, 6);
            double f6 = 151 / 6144 * Math.Pow(e_strich, 6);
 
            double a = g / e0;
            double bf = a + f2 * Math.Sin(2 * a) + f4 * Math.Sin(4 * a) + f6 * Math.Sin(6 * a);
            double tf = Math.Tan(bf);
            double nf2 = Math.Pow(e_strich, 2) * Math.Pow(Math.Cos(bf), 2);
            double rnf = a / (Math.Sqrt(1 - e2 * Math.Pow(Math.Sin(bf), 2)));
 
            double b2 = -(tf*(1+nf2))/(2*Math.Pow(mh,2)*Math.Pow(rnf,2));
            double b4 = (tf * (5 + 3 * Math.Pow(tf, 2) + 6 * nf2 * (1 - Math.Pow(tf, 2)))) / (24 * Math.Pow(mh, 4) * Math.Pow(rnf, 4));
            double b6 = -(tf * (61+ 90 * Math.Pow(tf, 2) + 45* Math.Pow(tf, 4))) / (720 * Math.Pow(mh, 6) * Math.Pow(rnf, 6));
 
            double l1 = 1 / (rnf * mh * Math.Cos(bf));
            double l3 = -(1 + 2 * Math.Pow(tf, 2) + nf2) / (6 * Math.Pow(mh, 3) * Math.Pow(rnf, 3) * Math.Cos(bf));
            double l5 = (5 + 28 * Math.Pow(tf, 2) + 24 * Math.Pow(tf, 4)) / (120 * Math.Pow(mh, 5) * Math.Pow(rnf, 5) * Math.Cos(bf));
 
     // Berechnung länge und Breite
            double breite_dezimal = bf + b2 * Math.Pow(y, 2) + b4 * Math.Pow(y, 4) + b6 * Math.Pow(y, 6);
            double länge_dezimal = lh + l1 * Math.Pow(y, 1) + l3 * Math.Pow(y, 3) + l5 * Math.Pow(y, 5);
 
            int breite_grad = Convert.ToInt16(breite_dezimal);
            int breite_minute = Convert.ToInt16(((breite_dezimal-Convert.ToDouble(breite_grad))*100*0.6));
            int breite_sekunde = Convert.ToInt16(((((breite_dezimal-Convert.ToDouble(breite_grad))*100*0.6)-Convert.ToDouble(breite_minute))*100*0.6));
            breite += Convert.ToString(breite_grad) + "°" + Convert.ToString(breite_minute) + "'" + Convert.ToString(breite_sekunde) + "''";
 
            int länge_grad = Convert.ToInt16(länge_dezimal);
            int länge_minute = Convert.ToInt16(((länge_dezimal - Convert.ToDouble(länge_grad)) * 100 * 0.6));
            int länge_sekunde = Convert.ToInt16(((((länge_dezimal - Convert.ToDouble(länge_grad)) * 100 * 0.6) - Convert.ToDouble(länge_minute)) * 100 * 0.6));
            länge += Convert.ToString(länge_grad) + "°" + Convert.ToString(länge_minute) + "'" + Convert.ToString(länge_sekunde) + "''";
 
            MyPunkt2D punkt_LB = new MyPunkt2D (länge,breite);
            return punkt_LB;

vielen Dank schon mal


gesamter Thread:

 RSS-Feed dieser Diskussion