UTM-Transformation

Grad,Minuten,Sekunden ↔ UTM-Koordinaten

UTM-Koordinaten eignen sich ausgezeichnet für lokale und regionale Maßstäbe bis zu einigen 100km Für größere (globale) Maßstäber verwendet man besser klassische Grad-Koordinaten. Auf dieser Seite finden sie einige Hinweise und Beispiele zur Umrechnung (Transformation) von UTM-Koordinaten und klassischen geografischen Koordinaten (Grad). Alle Angaben sind unverbindlich, die Verwendung erfolgt auf eigenes Risiko !
Kartografie Orientierung auf der Erdoberfläche
UTM Universal Transverse Mercator - Projektion
UTM-Zone UTM-(Längen)-Zone, Zonen-Grenzen und Zentral-Meridian
UTM-Zonenfeld UTM-(Breiten)-Zone (optional)
Erdmodell Auswahl des Rotations-Ellipsoids und Initialisierungs-Arbeiten
Array Rückgabe von Arrays aus (Unter)-Programmen
Initialisierung Einmalige Berechnung von Variablen
UTM-Zone Berechnung der UTM-(Längen)-Zone
UTM-Ostwert Die UTM X-Koordinate (Easting) in Meter
UTM-Nordwert Die UTM Y-Koordinate (Northing) in Meter
Geogr. Länge Länge in Grad aus UTM-Koordinaten
Geogr. Breite Breite in Grad aus UTM-Koordinaten
Test Vergleichs-Daten für eigene Tests, Genauigkeit
Links Ausgewählte Links zum Thema 'UTM-Transformation'
Verwandte Themen: Live Interaktive Weltkarte

UTM - Universal Transverse Mercator - Projektion

UTM ist der moderne weltweite Standard für die Angabe geografischer Koordinaten.
Punkt-Angaben bestehen aus UTM-(Längen)-Zone, Ostwert und Nordwert.
UTM-Koordinaten (Ostwert, Nordwert) werden in Meter angegeben und sind als ebene cartesische (XY)-Koordinaten verwendbar. Daher kann man mit UTM-Koordinaten mit einfachen Methoden der analytischen Geometrie rechnen. Das ist der größte Vorteil von UTM-Koordinaten.
Allerdings ist die Verwendung jeweils auf eine einzige UTM-Zone beschränkt, d.h. alle gleichzeitig verwendeten Orte müssen aus der gleichen UTM-Zone stammen oder in eine einzige Zone umgerechnet werden.
Auf dieser Seite finden sie Hinweise und Beispiele zur Umrechnung (Transformation) geografischer Koordinaten. Alle Angaben ohne Gewähr - Verwendung auf eigenes Risiko !
Der einfachen Anwendung von UTM-Koordinaten steht die relativ schwierige Umrechnung (Transformation) gegenüber. Transformationen sind relativ aufwändig und werden in der Praxis nicht 'exakt' sondern näherungsweise berechnet, d.h. die Methoden der Umrechnung (Reihen-Entwicklungen) werden an die gewünschte Genauigkeit angepasst.

Für den Amateur-Gebrauch, für die Arbeit mit Landkarten und für die Orientierung in der realen Natur ist eine Genauigkeit von 1..10m sinnvoll. An diesem Anspruch orientieren sich daher die hier vorgestellten Algorithmen.
Genauigkeit:
GPS: Gängige Geräte mit US-GPS oder dem russischen Glonass erreichen eine Genauigkeit von ca. +/- 10m. Mit Hilfe spezieller Methoden (Antennen, Referenz-Punkte, etc.) ist 1m oder besser erreichbar. Das europäische System Galileo ist trotz massiver US-Drohungen im Aufbau, wird jedoch erst >2012 eine Genauigkeit von ca. 10cm (kommerziell) bis 5m (öffentlich) bis in subpolare Regionen bieten.
Landkarten: Detailkarten 1:50000 sind etwa auf +/- 0.5mm genau ablesbar, das entspricht 25m in der Realität. Spezialkarten (Kataster, ...) sind bis auf ca. 10cm genau.
Geodäsie: Zur Vermessung der Erdoberfläche wird Triangulation verwendet, evtl. auch mit Satelliten-Unterstützung. Die Messungen sind bis auf ca. 1cm genau.
Anwendung:
Berechnung von UTM-Koordinaten aus Geografischen (Grad)-Koordinaten.
Berechnung von Geografischen (Grad)-Koordinaten aus UTM-Koordinaten
Umrechnung von UTM-Koordinaten in eine andere (benachbarte) UTM-Zone
Umrechnung von einem Erd-Modell in ein anderes.

Excel + Visual Basic
Alle vorgestellten Beispiele dieser Seite sind in der Programmiersprache Visual Basic for Applications ( VBA) programmiert. Sie lassen sich als 'Benutzer-Definierte Funktionen' im Kalkulations-Programm M$Excel verwenden.
Mit etwas Geschick lassen sich die Beispiele in jede andere Programmier-Sprache übertragen.
Software:
Zur Koordinaten-Transformation werden eigene Software-Pakete angeboten. Der Markt ist allerdings auf professionelle Spezialisten beschränkt, daher sind kostenfreie Produkte rar.
Das Programm Transdat wird vom deutschen Hersteller Killetsoft in professioneller Qualität als Demo-Version angeboten.

Im Internet können einige Transformations-Programme frei verwendet werden. In den meisten Fällen handelt es sich um Java-Applets. Diese lassen sich mit etwas Geschick auch am eigenen PC installieren.
Manche Applets verwenden spezielle nationale Erd-Modelle, sind auf die Nord-Halbkugel beschränkt, oder verwenden umgekehrte Vorzeichen für die geografische Länge !
Vor der Verwendung unbekannter Software sollte man die Ergebnisse mit "garantierten" Daten vergleichen, z.B. mit Koordinaten-Angaben offizieller Stellen.

UTM - (Längen) - Zone

Für das UTM-System wird die Erde von West nach Ost in 60 Zonen = Meridianstreifen eingeteilt.
Jeder Streifen umfasst 6 Längengrad.

Die Zonen werden von West nach Ost nummeriert, beginnend an der Datumgrenze (geogr.Länge 180°=-180°) mit Zone 1.
Die Ost-West-Erstreckung der UTM-Zonen ist zwar in Längengrad immer konstant 6°, verringert sich jedoch in km vom Äquator (668 km auf 0° Breite) zum Pol (70 km auf 84° Breite ). In Mitteleuropa beträgt sie ca. 450km.

Grenzen: Die UTM-Zonen sind auf den Bereich -80° (Süd) bis +84° (Nord) begrenzt. Das UTM-System ist in Polargebieten nicht anwendbar.
Berechnung der UTM-Zone aus der geografischen Länge in Grad (Longitude):
Das Beispiel rechts (in VBA) arbeitet für Längen in Grad 0..360 oder -180..+180

Dieser Algorithmus berücksicht nicht die Ausnahmen (irreguläre Zonen) für Norwegen.
Function utm_zone(lon_deg As Double) As Integer
utm_zone = Int((lon_deg + 360) / 6) + 31
While utm_zone > 60
utm_zone = utm_zone - 60
Wend
End Function
Berechnung der geografischen Länge in Dezimalgrad aus der UTM-Zone:
Das Beispiel berechnet die Länge in Grad an der West-Grenze (links) einer UTM-Zone.
Zur Berechnung der Länge am Zentral-Meridian einer Zone addieren sie +3° (abgeschaltete Zeile).
Die Länge an der Ost-Grenze ergibt sich durch Addition von +6° zur West-Grenze.
Function utm_to_lon_deg(utm_zone As Integer) As Double
If (utm_zone > 0 And utm_zone <= 60) Then
utm_to_lon_deg = utm_zone * 6 - 186
' utm_to_lon_deg = utm_zone * 6 - 183
Else
utm_to_lon_deg = 1 / 0
End If
End Function
Wikipedia: Europa-Karte der UTM-Zonen  

UTM Breiten-Zone (Zonenfeld)

Jede UTM (Längen)-Zone ist von Süd nach Nord in 20 Breiten-Zonen (Zonenfelder) zu je 8° Süd-Nord Erstreckung ( geografische Breite) unterteilt. Diese Unterteilung ist eine (überflüssige) Redundanz, wenn durch die Angabe des UTM-Nordwerts die Breite bereits festgelegt ist. Deshalb ist die Angabe des Zonenfelds optional und eigentlich nur dann sinnvoll, wenn keine Koordinaten angegeben werden.

Die Zonenfelder werden von Süd nach Nord mit Großbuchstaben bezeichnet, beginnend mit Bereich C (-80°..-72° Süd).
Die Buchstaben I und O werden wegen Gefahr der Verwechslung mit den Ziffern 1 oder 0 ausgelassen, das kompliziert den Algorithmus etwas. Der Äquator liegt an der Grenze der Zonenfelder M und N.

Europa liegt in den Zonenfeldern S (32°..40° Nord) bis W (64°..72° Nord). Zonenfeld X (72°..84°) ist als einziges 12° 'hoch'.
Beispiel: Zonenfeld 33T reicht von (12°,40°) bis (18°,48°)

Berechnung des UTM Zonenfelds aus der geografischen Breite in Grad:
Rechts ein Beispiel für einen Algorithmus in VBA. Der Algo kann etwas umgestellt werden, um für bestimmte Gebiete (Mitteleuropa) auf Kosten aller anderen Gebiete schneller zu rechnen.
Beispiel für einen Algorithmus (hier in VBA) zur Berechnung der UTM-Breitenzone aus der geografischen Breite (in Grad -80..+84, Latitude): Als Fehler-Wert wird '?' zurückgegeben.
Function utm_latzone(lat_deg As Double) As String
Dim i As Integer
Dim s As String
s = "?"
If (lat_deg>= -80 And lat_deg<= 84) Then
i = Int(lat_deg / 8) + 77
If i > 72 Then i = i + 1
If i > 78 Then i = i + 1
If i > 88 Then i = i - 1
s = Chr(i)
End If
utm_latzone = s
End Function
Nord
X
W
V
U
T
S
R
Q
P
N
Äquator
M
L
K
J
H
G
F
E
D
C
Süd
Berechnung der geografischen Breite aus dem UTM-Zonenfeld.
Das Beispiel berechnet die Breite an der Süd-Grenze ('unten') eines UTM-Zonenfelds. Für illegale Felder wird ein Fehlerwert (Division durch Null) zurückgegeben.
Zur Absicherung wird das erste Zeichen des übergebenen Strings isoliert und in Großbuchstaben umgewandelt.
Zur Berechnung der Nord-Grenze addieren sie 8°, in der nördlichsten Zone X allerdings 12°
Function utm_to_lat_deg(utm_latzone As String) As Double
Dim i As Integer
i = Asc(UCase(Left(utm_latzone, 1)))
If (i > 66 And i < 89) Then
If i > 72 Then i = i - 1
If i > 77 Then i = i - 1
utm_to_lat_deg = i * 8 - 616
Else
utm_to_lat_deg = 1 / 0
End If
End Function
MIL-Breitenzonen
Unabhängig davon ist auch eine andere Definition von Breiten-Zonen in Gebrauch. Sie dürfte vorwiegend im militärischen Umfeld Anwendung finden, ist jedoch auf neueren Landkarten guter Qualität angeführt.
Die MIL-Breitenzonen haben eine Süd-Nord Erstreckung von und werden ebenfalls mit Buchstaben bezeichnet, jedoch in anderer Reihenfolge.
Details dazu auf der Seite zu den österr. Karten 1:50000
Wikipedia: Europa-Karte der UTM-Zonen

Koordinaten-Transformation (Länge,Breite) ↔ (UTM-Zone, UTM-E, UTM-N)

Die Algorithmen zur Umwandlung von geografischer Länge und Breite in UTM-Koordinaten und umgekehrt sind relativ komplex und erfordern professionelle kartografische Kenntnisse. Sie werden daher hier als Muster ohne Gewähr vorgestellt und nur aus IT-Sicht kommentiert.
Die Anwendung der Beispiele erfolgt auf eigenes Risiko !
Rotations-Ellipsoid Die Erd-Oberfläche wird in allen einfachen Rechnungen als Rotations-Ellipsoid angenommen.
Dieser Körper wird durch seinen Mittelpunkt und durch die beiden Halb-Achsen a,b definiert.
Je nach Kontinent und Staat wurden historisch unterschiedliche Erd-Modelle definiert, die den nationalen Verhältnissen optimal angepasst waren.
Heute werden nur mehr globale Erd-Modelle verwendet, meistens das Modell WGS84, dessen Daten im folgenden Beispiel fix eingetragen sind.

Alle hier gezeigten Beispiele verwenden das gleiche Erd-Modell WGS84
Wenn sie ein anderes Erd-Modell verwenden wollen, ersetzen sie die beiden Achsen a,b durch dessen Daten.

Eine Verschiebung des Mittelpunkts wird in diesem vereinfachten Beispiel nicht berücksichtigt, ebenso ein Wechsel des Erd-Modells ('Datum-Transformation').
Klicken sie ein Modell der Liste, um die Details anzuzeigen.
Verwenden sie im Zweifel immer WGS84.
Die Modelle unterscheiden sich historisch (Zeitpunkt der Daten-Aufnahme und Modell-Rechnung) und geografisch.

Alle älteren Modelle haben regionale Bedeutung: Sie sind an eine Region optimal angepasst, ergeben jedoch bei Anwendung auf andere Kontinente größere Fehler.

Die globalen Modelle gehen auf die US-Armee zurück, die als erste (und seither laufend) globale Kriege führte.

In den USA wird NAD (Basis Clarke 1866) in ca. 137 regionalen Varianten (zones) verwendet.
Links: Wikipedia, Kowoma (de)
Die Daten stammen aus unterschiedlichen Quellen und wurden ergänzt: 2 der 3 angeführten Zahlen-Daten genügen zur Berechnung aller anderen Ellipsoid-Werte.
a ... Große (äquatoriale) Halbachse des Rotations-Ellipsoids in m
b ... Kleine (polare) Halbachse des Rotations-Ellipsoids in m

Ursprung:
Der xyz Koordinaten-Ursprung der Modelle liegt teilweise etwas verschoben. Diese Daten unterscheiden sich je nach Anwendung (auf ein Staatsgebiet) und sind hier subjektiv gewichtet.
Einige abgeleitete Daten:
a = b/(1-f) = sqr(b2+e2) Große (äquatoriale) Halbachse
b = a*(1-f) = sqr(a2-e2) Kleine (polare) Halbachse
e = sqr(a2-b2) = sqr(1-(b/a)2) Lineare Exzentrizität
ε = e/a Numerische Exzentrizität
f = 1 - b/a Abflachung (meist als 1/f angegeben)
e12 = f*(1-2*f) = (a2-b2)/a2  
e22 = e12/(1-e12) = (a2-b2)/b2  

Arrays

Alle modernen Programmiersprachen können aus Unterprogrammen (Functions, Subs) nicht nur einzelne Variable (Skalare) sondern auch Arrays zurückgeben. In diesem Fall genügt zur Umrechnung von Grad in UTM und umgekehrt je eine einzelne Funktion, die ein Array von 2 (Länge, Breite) oder 3 (UTM) Werten zurückgibt.
Für die Kombination von Excel + VisualBasic sind 5 einzelne Funktionen notwendig, da eine mit Excel verwendete VBA-Function nur genau einen Wert zurückgeben kann. Daher werden leider manche Programm-Teile mehrfach ausgeführt. Vorläufig werden hier nur die Visual Basic Beispiele vorgestellt, weil die Kombination mit Excel derzeit die größte praktische Bedeutung hat.
Wenn Sie die Beispiele sinngemäß auf andere Programmiersprachen übertragen, dann ist es sinnvoll, sie in 2 Programme zuzsammenzufassen und Arrays zurückzugeben. Das macht die Programme einfacher und etwa doppelt so schnell. Details zu Arrays (Javascript, Perl, PHP, VBA)

Initialisierung

Globale Variable
In allen hier gezeigten Beispielen wird das Erd-Modell nicht geändert. Daher ist es sinnvoll, alle vom Erd-Modell abgeleiteten Variablen nur einmal zu berechnen und als Globale Variable (für alle Programme verfügbar) zu definieren.
Globale Variable in Visual Basic Syntax:
Dim pi As Double
Dim a, b, e, e1, e1sq, e2sq, e2, ne As Double
Dim k0, s1, a0, a1, a2, a3, a4, mui As Double
Die einmalige Berechnung wird vom Programm init (nächster Absatz) ausgeführt.
Initialisierung
In modernen Programmiersprachen ist die 'Kreiszahl' π selbstverständlich vor-definiert. Nur in VBA muss man π als Variable pi berechnen (rechts) oder als Konstante vorgeben:
Const pi = 3.14159265358979

Für das Erd-Modell werden nur die Halbachsen des Ellipsoids als Variable a,b fix eingetragen. Alle anderen Daten werden daraus berechnet. Das kostet praktisch keine Rechenzeit, ist jedoch flexibler als die Eintragung von Zahlenwerten für alle vom Modell abgeleiteten Variablen. Für ein anderes Erd-Modell müssen lediglich die Zahlenwerte der beiden Haƶbachsen geändert werden.

In allen anderen Programmen muss die vorherige Initialisierung sichergestellt werden. Dazu wird ein kleiner (eigentlich unsauberer) Trick verwendet: Alle bekannten Versionen von VBA initialisieren numerische Variable automatisch mit dem Wert=0
Die Prüfung einer Variablen (hier pi) auf =0 gibt daher Aufschluss über die Initialisierung.
Beispiel: Einmalige Initialisierung der Globalen Variablen in Visual Basic Syntax:
Sub init()
Dim ne1 As Double
pi = 4 * Atn(1)

a = 6378137
b = 6356752.31424518
ne = (a-b) / (a+b)
ne1 = (1-ne)
e2 = 1 - (b/a)^2
e = Sqr(e2)
e1 = (1 - Sqr(1 - e^2)) _
/ (1 + Sqr(1 - e^2))
e1sq = e^2 / (1 - e^2)
e2sq = e1sq / (1 - e1sq)

k0 = 0.9996
s1 = pi / 180 / 3600
a0 = a * (ne1 + 5 _
* ne^2 / 4 * ne1 + 81 _
* ne^4 / 64 * ne1)
a1 = (3 * a * ne / 2) _
* (ne1 - 7 * ne^2 / 8 _
* ne1 + 55 * ne^4 / 64)
a2 = (15 * a * ne^2 / 16) _
* (ne1 + 3 * ne^2 / 4 * ne1)
a3 = (35 * a * ne^3 / 48) _
* (ne1 + 11 * ne^2 / 16)
a4 = (315 * a * ne^4 / 51) * ne1
mui = (k0 * a * _
(1 - 0.25 * e2 - _
0.046875 * e2^2 - _
0.01953125 * e2^3))
End Sub

Berechnung der UTM-(Längen)-Zone

UTM-Zone
Der Vollständigkeit halber wird die im Absatz UTM-Zone beschriebene Formel zur Berechnung der UTM-Zone aus der geografischen Länge in Dezimalgrad (Longitude) hier wiederholt.
Die irregulären Zonen in Nordeuropa werden hier nicht berücksichtigt !

Für Orts-Koordinaten ist die Angabe der UTM-Zone unbedingt erforderlich. UTM-Koordinaten ohne Zone sind undefiniert !
Ausnahme: Rechnen (Abstand, Richtung, ..) mit UTM-Koordinaten sehr kleiner Gebiete, die sich garantiert in der gleichen UTM-Zone befinden.
Function utm_zone(lon_deg As Double) As Integer
While lon_deg < 0
lon_deg = lon_deg + 360
Wend
While lon_deg > 360
lon_deg = lon_deg - 360
Wend
utm_zone = Int((lon_deg + 180) / 6) + 1
While uz > 60
uz = uz - 60
Wend
End Function

Berechnung des UTM Ost-Werts (Easting)

UTM-Ostwert
Das Beispiel zeigt die Berechnung des UTM Ost-Werts in Meter aus der geografischen Länge (östl. Greenwich) und Breite (nördl. Äquator) in Grad.
Der Ost-Wert ergibt nach Subtraktion der Zahl 500000 den Abstand eines Ortes vom Zentral-Meridian der UTM-Zone in Meter = die X-Koordinate für einfache Rechnungen in ebener Geometrie.

Vor der Rechnung wird die Initialisierung der globalen Variablen (Programm init) ausgeführt, falls nötig.

Das Argument utm_zone ist optional. Wenn es weggelassen wird, dann wird der UTM-Ostwert der 'natürlichen' UTM-Zone berechnet. Ansonsten wird der Ostwert der gewünschten Zone berechnet.

Begrenzen sie in eigenen Programmen diese Option auf die beiden Nachbarzonen ! - Transformation in weiter entfernte Zonen ergibt unbrauchbar große Verzerrungen.

Die Beispiel-Funktion transformiert alle Koordinaten ohne Änderung des Erdmodells.
Function lonlat_to_utme( _
lon_deg As Double, _
lat_deg As Double, _
Optional utm_zone As Integer = 0) _
As Double
Dim cm, uz As Integer
Dim lat, lon, nu, p, k4, k5 As Double
If pi <= 0 Then Call init
uz = zone_test(lon_deg, utm_zone)
cm = uz * 6 - 183
lat = lat_deg * pi / 180
nu = a / Sqr(1 - (e * Sin(lat))^2)
k4 = nu * Cos(lat) * s1 * k0 * 10000
p = (lon_deg - cm) * 3600 / 10000
k5 = (s1 * Cos(lat))^3 _
* (nu / 6) _
* (1 - Tan(lat)^2 + e1sq * Cos(lat)^2) _
* k0 * 1000000000000
lonlat_to_utme = 500000 + k4 * p + k5 * p^3
End Function
Die Hilfs-Funktion zone_test wurde eingeführt, um die Koordinaten von Punkten in eine Nachbar-Zone zu transformieren.

Das ist notwendig, wenn man Rechnungen mit Punkten durchführen will, die sich auf beiden Seiten einer UTM Zonengrenze befinden:

In diesem Fall transformiert man alle Punkte in die gleiche Zone - vorzugsweise dorthin, wo die Punkte weiter von der Grenze entfernt sind.

Vorteil: Im UTM-System sind einfache Rechnungen in einem XY-Koordinaten-System möglich.
Nachteil: Die Verzerrung wächst rasch mit dem Abstand vom jeweiligen Zentral-Meridian: Für große Entfernungen benutzt man besser ein anderes System als UTM (=andere Landkarten).
Private Function zone_test( _
lon_deg As Double, _
Optional utm_zone As Integer = -9999) _
As Integer
Dim zt As Integer
zt = utm_zone
If (zt > -9999) Then
While zt < 0
zt = zt + 60
Wend
While zt > 60
zt = zt - 60
Wend
Else
zt = lonlat_to_utmz(lon_deg)
End If
zone_test = zt
End Function

Berechnung des UTM Nord-Werts (Northing)

UTM-Nordwert
Das Beispiel zeigt die Berechnung des UTM Nord-Werts in Meter aus der geografischen Länge (östl. Greenwich) und Breite (nördl. Äquator) in Grad.
Der Nord-Wert entspricht dem Abstand eines Ortes vom Äquator in Metern = die Y-Koordinate für einfache Rechnungen in ebener Geometrie.

Vor der Rechnung wird die Initialisierung der globalen Variablen (s.o.) ausgeführt, falls nötig.

Das Argument utm_zone ist optional. Wenn es weggelassen wird, dann wird der UTM-Nordwert der 'natürlichen' UTM-Zone berechnet. Ansonsten wird der Nordwert der angegebenen Nachbar-Zone berechnet.

Die Beispiel-Funktion transformiert die Koordinaten ohne Änderung des Erdmodells.
Function lonlat_to_utmn( _
lon_deg As Double, _
lat_deg As Double, _
Optional utm_zone As Integer = 0) _
As Double
Dim cm, uz As Integer
Dim lat, k1, k2, k3, s, nu, p As Double
If pi <= 0 Then Call init
uz = zone_test(lon_deg, utm_zone)
cm = utm_zone * 6 - 183
lat = lat_deg * pi / 180
s = a0 * lat _
- a1 * Sin(2 * lat) _
+ a2 * Sin(4 * lat) _
- a3 * Sin(6 * lat) _
+ a4 * Sin(8 * lat)
k1 = s * k0
nu = a / Sqr(1 - (e * Sin(lat))^2)
k2 = nu * Sin(lat) * Cos(lat) * s1^2 _
* k0 * 100000000 / 2
p = (lon_deg - cm) * 3600 / 10000
k3 = ((s1^4 * nu * Sin(lat) * Cos(lat)^3) / 24) _
* (5 - Tan(lat)^2 + 9 * e1sq * Cos(lat)^2 _
+ 4 * e1sq * e1sq * Cos(lat)^4) * k0 * 1E+16
lonlat_to_utmn = k1 + k2 * p^2 + k3 * p^4
End Function

Berechnung der geografischen Länge (Longitude)

Geografische Länge in Dezimalgrad
Das Beispiel zeigt die Berechnung der geografischen Länge aus UTM-Zone, sowie UTM-Easting und UTM-Northing in Meter.
Die geografische Länge gibt den Abstand eines Ortes vom Null-Meridian (durch Greenwich) in West→Ost-Richtung in Grad (0..360°) an.
Das Beispiel berechnet Dezimal-Grad. Umrechnung in Grad, Minuten und Sekunden.

Vor der Rechnung wird die Initialisierung der globalen Variablen (s.o.) ausgeführt, falls nötig.

Die Beispiel-Funktion transformiert die Koordinaten ohne Änderung des Erdmodells.
Function utm_to_lon( _
utm_z As Integer, _
utm_e As Double, _
utm_n As Double) _
As Double
Dim cm As Integer
Dim asp, cp2, d, lon, mu, phi, tp2, utm_y As Double
If pi <= 0 Then Call init
If (utm_n >= 10000000) Then
utm_y = utm_n - 10000000
Else
utm_y = utm_n
End If
cm = utm_z * 6 - 183
mu = utm_y / mui
phi = mu _
+ (3 * e1 / 2 - 27 * e1^3 / 32) _
* Sin(2 * mu) _
+ (21 * e1^2 / 16 - 55 * e1^4 / 32) _
* Sin(4 * mu) _ + (151 * e1^3 / 96) _
* Sin(6 * mu)
asp = a / Sqr(1 - e2 * Sin(phi) * Sin(phi))
tp2 = Tan(phi) * Tan(phi)
cp2 = e2 * Cos(phi) * Cos(phi)
d = (utm_e - 500000) / (asp * k0)
lon = (d - (1 + 2 * tp2 + cp2) _
* d^3 / 6 + (5 - 2 * cp2 + 28 * tp2 _
- 3 * cp2^2 + 8 * e1sq + 24 * tp2^2) _
* d^5 / 120) / Cos(phi)
utm_to_lon = cm + lon * 180 / pi
End Function

Berechnung der geografischen Breite (Latitude)

Geografische Breite in Dezimalgrad
Das Beispiel zeigt die Berechnung aus UTM-Zone (dimensionslos) sowie UTM-Easting und UTM-Northing in Meter.
Die geografische Breite gibt den Abstand eines Ortes vom Äquator in Süd→Nord-Richtung in Grad (-90°..+90°) an.
Das Beispiel berechnet Dezimal-Grad. Umrechnung in Grad, Minuten und Sekunden.

Vor der Rechnung wird die Initialisierung der globalen Variablen (s.o.) ausgeführt, falls nötig.
Die Beispiel-Funktion transformiert die Koordinaten ohne Änderung des Erdmodells.
Function utm_to_lat( _
utm_z As Integer, _
utm_e As Double, _
utm_n As Double) _
As Double
Dim lat, phi, r1, utm_y As Double
Dim asp, cp2, d, mu, tp2 As Double
If pi <= 0 Then Call init
If (utm_n >= 10000000) Then
utm_y = utm_n - 10000000
Else
utm_y = utm_n
End If
mu = utm_y / mui
phi = mu _
+ (3 * e1 / 2 - 27 * e1^3 / 32) _
* Sin(2 * mu) _
+ (21 * e1^2 / 16 - 55 * e1^4 / 32) _
* Sin(4 * mu) _
+ (151 * e1^3 / 96) _
* Sin(6 * mu)
asp = a / Sqr(1 - e2 * Sin(phi) * Sin(phi))
tp2 = Tan(phi) * Tan(phi)
cp2 = e2 * Cos(phi) * Cos(phi)
r1 = a * (1 - e2) _
/ ((1 - e2 * Sin(phi) * Sin(phi)) ^ (3 / 2))
d = (utm_e - 500000) / (asp * k0)
lat = phi - (asp * Tan(phi) / r1) _
* (d^2 / 2 _
- (5 + 3 * tp2 + 10 * cp2 - 4 * cp2^2 - 9 * e1sq) _
* d^4 / 24 _
+ (61 + 90 * tp2 + 298 * cp2 + 45 * tp2^2 _
- 252 * e1sq - 3 * cp2^2) _
* d^6 / 720)
utm_to_lat = lat * 180 / pi
End Function

Test

Die Tabelle bietet zum Test die Koordinaten einiger Städte. Die Daten geben evtl. das Stadt-Zentrum nicht besonders genau an, die Umrechnung sollte jedoch mit eigenen Daten einigermaßen übereinstimmen. Die Orts-Koordinaten sind ebenso unverbindlich wie alle anderen Beispiele dieser Seite:
Länge und Breite in Dezimalgrad, UTM-Easting und -Northing in Meter.
Stadt LängeBreite UTM-ZoneUTM-EastingUTM-Northing
Athen 23.73337.983 347400284207453
Berlin 13.40052.517 333914335819746
Dublin -6.25053.330 296831235912507
Genf 6.16746.200 322814305120171
Helsinki 24.93460.176 353853886672805
Lissabon -9.13338.717 294884384285381
London 0.00051.500 312917835709697
Moskau 37.62055.750 374133816179118
München 11.574 48.139 326914855334954
Paris 2.33348.867 314510845412885
Rom 12.48341.900 332912154641737
Wien 16.37448.209 336020785340443
Zürich 8.55047.367 324660235246047
Abweichungen:
Die hier vorgestellten Beispiel-Funktionen ergeben (rein arithmetisch !) folgende mittlere Abweichungen:
UTM-Easting:  0.00 +/- 0.08 Meter
UTM-Northing: 0.07 +/- 0.00 Meter

Beim Zurück-Rechnen von UTM-Koordinaten auf Dezimalgrad ergeben sich diese mittleren Abweichungen:
Länge: -0.4 +/- 6.8E-7 Grad
Breite: 3.0 +/- 0.3E-7 Grad
Diese Genauigkeit (ca. 10cm) ist für den Amateur-Gebrauch ausreichend, z.B. für die Navigation mit Karte und Kompass, oder mit GPS. Für professionelle Anwendungen werden höhere Ansprüche gestellt, mindestens jedoch die Umrechnung auf andere Erd-Modelle.