GEOGR. Koord. zu GK-Koord. in Java (Geodäsie/Vermessung)

Thomas @, Mainz, Wednesday, 22.12.2010, 07:41 (vor 4873 Tagen) @ MichaeL

Hallo Michael,
danke für die schnelle Antwort. Also zunächst einmal habe ich die Umrechnung von UTM zu Geographischen Koordinaten nach meinen Formeln aus der Studienzeit berechnet (Schödlbauer).

Hier sind mal 3 Formelblätter:

Geographische Koord. zu Gauss-Krüger
Geographische Koord. zu Gauss-Krüger Alternative
UTM-Koord. zu Geographischen Koordinaten

Da ich mit keiner dieser Formeln 100%ig zufrieden war, habe ich es dann später mit folgendem (an VB angepassten) Quellcode probiert, den ich hier gefunden habe:

 
Public Function UTM2GEO(ByVal UTM_N As Double, ByVal UTM_E As Double, ByVal Zone As Integer) As String
        'für GRS80-Ellipsoid
        a = 6378137
        'b = 6356752.3141
        f = 0.0033528106811935602
        '-----------------------------------------------------------------------
        'für Hayford-Ellipsoid
        'a = 6378388
        'b = 6356911.946
        'f = 0.0033670033670033669
        '-----------------------------------------------------------------------
        'für Bessel-Ellipsoid
        'a = 6377397.155
        'b = 6356078.963
        'f = 0.0033427731799399793710112964908005
        '-----------------------------------------------------------------------
        'für WGS84
        'a = 6378137.
        'f = 0.00335281068
        '-----------------------------------------------------------------------

 
        '  PoUTM_Eümmungshalbmesser c
        c = a / (1 - f)
 
        '  Quadrat der zweiten numerischen Exzentrizität
        ex2 = (2 * f - f * f) / ((1 - f) * (1 - f))
        ex4 = ex2 * ex2
        ex6 = ex4 * ex2
        ex8 = ex4 * ex4
 
        '  Koeffizienten zur Berechnung der geographischen Breite aus gegebener
        '  Meridianbogenlänge
        e0 = c * (Math.PI / 180) * (1 - 3 * ex2 / 4 + 45 * ex4 / 64 - 175 * ex6 / 256 + 11025 * ex8 / 16384)
        f2 = (180 / Math.PI) * (3 * ex2 / 8 - 3 * ex4 / 16 + 213 * ex6 / 2048 - 255 * ex8 / 4096)
        f4 = (180 / Math.PI) * (21 * ex4 / 256 - 21 * ex6 / 256 + 533 * ex8 / 8192)
        f6 = (180 / Math.PI) * (151 * ex6 / 6144 - 453 * ex8 / 12288)
 
 
        '  Geographische Breite bf zur Meridianbogenlänge gf = UTM_N
        Sigma = (UTM_N / 0.9996) / e0
        sigmr = Sigma * Math.PI / 180
        Bf = Sigma + f2 * Math.Sin(2 * sigmr) + f4 * Math.Sin(4 * sigmr) + f6 * Math.Sin(6 * sigmr)
 
        '  Breite bf in Radianten
        br = Bf * Math.PI / 180
        tan1 = Math.Tan(br)
        tan2 = tan1 * tan1
        tan4 = tan2 * tan2
 
        cos1 = Math.Cos(br)
        cos2 = cos1 * cos1
 
        etasq = ex2 * cos2
 
        '  Querkrümmungshalbmesser nd
        nd = c / (1 + etasq) ^ 0.5
        nd2 = nd * nd
        nd4 = nd2 * nd2
        nd6 = nd4 * nd2
        nd3 = nd2 * nd
        nd5 = nd4 * nd
 
        '  Längendifferenz dl zum Bezugsmeridian lh
        Lh = (Val(Mid(Zone, 1, 2)) - 30) * 6 - 3
        dx = (UTM_E - 500000) / 0.9996
        dx2 = dx * dx
        dx4 = dx2 * dx2
        dx3 = dx2 * dx
        dx5 = dx4 * dx
        dx6 = dx3 * dx3
 
        B2 = -tan1 * (1 + etasq) / (2 * nd2)
        B4 = tan1 * (5 + 3 * tan2 + 6 * etasq * (1 - tan2)) / (24 * nd4)
        B6 = -tan1 * (61 + 90 * tan2 + 45 * tan4) / (720 * nd6)
 
        L1 = 1 / (nd * cos1)
        L3 = -(1 + 2 * tan2 + etasq) / (6 * nd3 * cos1)
        L5 = (5 + 28 * tan2 + 24 * tan4) / (120 * nd5 * cos1)
 
        '  Geographischer Breite bb und Länge l als Funktion von Ostwert x und Nordwert y
        BB = Bf + (180 / Math.PI) * (B2 * dx2 + B4 * dx4 + B6 * dx6)
        LL = Lh + (180 / Math.PI) * (L1 * dx + L3 * dx3 + L5 * dx5)
 
        Geo_Koord = CStr(BB) + "/" + CStr(LL)
 
        Return Geo_Koord
 
    End Function
 

Allerdings scheint es hier auch Probleme bei der Berechnung des Längengrades zu geben.

Ich werde später mal versuchen, ob ich mit deinen Formeln zu Potte komme, muss jetzt allerdings in den Außendienst. Vielen Dank für deine Mühe.

Gruss
Thomas


gesamter Thread:

 RSS-Feed dieser Diskussion