| Das System UTMREF ist eine Variante von UTM zur Beschreibung von Flächen (nicht Punkten). Es wurde ursprünglich zu militärischen Zwecken entwickelt, wird aber auch von Behörden eingesetzt. | Die verwendeten Algorithmen sind sehr unübersichtlich. Auf dieser Seite finden sie einige Hinweise zu UTMREF - ohne Gewähr ! |
Kartografie
|
Orientierung auf der Erdoberfläche |
| UTM | Universal Transverse Mercator - Projektion |
| UTMREF | Komplizierte Darstellung einfacher Koordinaten - UTMREF / MGRS |
| Algorithmus | Berechnung eines UTMREF Strings |
| Live UTMREF | Live UTMREF Demonstration |
| Beispiel | VBA-Funktion zur UTMREF-Berechnung |
| Mil-Variante | Die militärische Variante der UTM-Zonen |
UTM - Universal Transverse Mercator - Projektion |
|
|
UTM ist der moderne weltweite Standard für die Angabe geografischer Koordinaten.
Normalerweise wird die UTM-Variante für Punkt-koordinaten
verwendet. GPS und moderne Landkarten verwenden UTM. ♦ Details zu UTM. |
UTM vereinfacht Rechnungen in kleinen Maßstäben, da alle Orte in eine ebene
rechteckige Fläche transformiert wurden. Ein weiterer Vorteil ist die Ablösung der vielen verschiedenen (historisch gewachsenen) nationalen Koordinatensysteme durch das weltweit einheitliche UTM. UTMREF ist ein auf UTM aufbauender Standard, sozusagen ein "Dialekt" der Formulierung von UTM-Daten. |
UTMREF - Algorithmus |
|||||||||||||||||||||||||
(1) ZonenfeldJede UTMREF-Angabe definiert ein UTM-"Zonenfeld" im Ausmaß von 6° Länge und 8° Breite (Geografische Länge / Breite in Grad). Die entsprechende UTMREF Angabe besteht aus 3 Zeichen.Zonenfeld-Länge:Die Länge wird durch 2 Zeichen angegeben. Dazu berechnet man die Nummer der UTM Längen-Zone (1..60) von 6° (Ost - West)Beispiel Wien: Länge=16.37434°, daraus wird berechnet UTM-(Längen)-Zone=33 ♦ Details zur Berechnung der Längen-Zone Zonenfeld-Breite:Die Breite wird durch 1 Zeichen angegeben. Dazu berechnet man den Buchstaben (C..X) der Breiten-Zone von 8° (Süd - Nord).Beispiel Wien: Breite=48.2088°, daraus wird berechnet UTM-Breiten-Zone=U Einschränkung: UTM verwendet nur -80° Süd .. Breite .. +84° Nord. (In den Pol-Regionen verwendet man das UPS-System). Ausnahme: Zone X reicht von +72° bis +84° und umfasst daher als einzige Zone 12 Breiten-Grade. ♦ Details zur Berechnung der Breiten-Zone |
Anzahl
Damit wird die gesamte Erd-Oberfläche mit Ausnahme der Pol-Gebiete in 1200
Zonenfelder eingeteilt.Größe
Die einzelnen Zonenfelder sind allerdings unterschiedlich groß:Die Ost-West-Erstreckung ist stark unterschiedlich. Sie beträgt am Äquator ca. 668km und auf 80°Breite (Subpolar) ca. 116km Die Süd-Nord-Erstreckung ist ungefähr gleich groß. Sie beträgt am Äquator ca. 885.5km und am Pol ca. 891.5km Im Mitteleuropa beträgt die Größe ca. 421km (Ost-West) und 889.5km (Süd-Nord). Das ergibt eine Fläche von je ca. 375000 Quadratkilometer. Beispiele für die Zonenfelder einiger Städte:
|
||||||||||||||||||||||||
(2) PlanquadratDie nächsten 2 Zeichen definieren ein Planquadrat von je 100x100km Seitenlänge und damit in den Übergang von Zonenfeldern ungleicher Form und Größe zu Planquadraten gleicher Größe.Planquadrat-LängeFür dieses Zeichen (1 Buchstabe A..Z) gibt es 3 verschiedene Varianten, die in der Reihenfolge der UTM-Längen-Zonen (1..60) wiederholt werden.Dazu berechnet man UTM-Zone modulo 3 und wählt den angegebenen String
Beispiel Wien:
Zone=33 ergibt 33 % 3 = 9 und
damit String=STUVWXYZ Danach berechnet man UTM-Ost Wert und zählt einen Buchstaben des Strings für je 100 volle km. Beispiel Wien: UTM-Ost=602104m ergibt 600 km und damit das 6. Zeichen des Strings X ♦ Details zur Modulo-Funktion Achtung: Wikipedia gibt eine andere Tabelle für die zu verwendenden Zeichen an, die zwar für Deutschland korrekte Werte ergibt, für andere Gebiete (z.B. Österreich) jedoch abweichende Werte ! Planquadrat-BreiteDieses Zeichen (1 Buchstabe A..V) wird aus dem StringABCDEFGHJKLMNPQRSTUV
mit 20 Zeichen wiederholt. Dazu berechnet man den UTM-Nord Wert und zählt
je einen Buchstaben des strings für je 100 volle km.
Beispiel Wien:
UTM-Nord=5340420m ergibt 5300km53 modulo 20 = 13 Dazu wird +1 addiert, das ergibt 13+1=14 das 14. Zeichen des Strings ist P Die UTMREF-Angabe für das Planquadrat von Wien lautet nun UTMREF=33UXP |
Anordnung
An der Ost- und West-Grenze jedes Zonenfelds fallen zwar die Grenzen von Zonenfeld
und Planquadraten zusammen, es ergeben sich jedoch unvollständige
keilförmige Planquadrate. Die Süd- und Nord-Grenzen von Zonenfeldern
und Planquadraten fallen nur am Äquator genau zusammen, d.h. ein Planquadrat
kann in 2 verschiedene Zonenfelder fallen.![]() Grafik der Anordnung für Deutschland u.a. bei Wikipedia. Achtung: Die Planquadrate von Zone 32 (Deutschland) ergeben nach den hier gezeigten Regeln die gleichen Planquadrat-Namen, von Zone 33 (Österreich) jedoch andere ! Anzahl
Jede UTM-Zone hat die Form einer Orangenspalte. Sie erreicht am Äquator ihre
maximale Ost-West "Breite" von 8 Planquadraten. In Richtung zu den
Polen wird sie schmäler und reduziert sich zuletzt auf 2 Planquadrate.
Die Süd-Nord "Höhe" ist mit ca. 9 Planquadraten weitgehend
konstant.In Mitteleuropa enthält ein Zonenfeld ca. 36 vollständige Planquadrate. Größe
Vollständige Planquadrate haben eine fixe Größe von 100x100km.
Am Ost- und West-Rand jedes Zonenfelds gibt es zusätzlich unvollständige
keilförmige Planquadrate kleinerer Größe.
|
||||||||||||||||||||||||
|
(3) Ostwert und Nordwert
Zur Angabe kleinerer Flächen verwendet man X- und Y-Koordinaten, die von
der Südwest-Ecke ("links unten") jedes Planquadrats gemessen werden.Im Gegensatz zur Berechnung von Zonenfeld und Planquadrat sind diese Daten durch einfache Messung auf UTM-Karten leicht zugänglich. UTMREF bietet die Möglichkeit variabler Genauigkeit: Mit je 1 Ziffer für X und Y definiert man ein Quadrat 10x10km ... mit je 5 Ziffern ein Quadrat von 1x1m und damit eine Punkt-Meldung. Bedingung ist die Verwendung gleich vieler Ziffern für X- und Y-Wert. |
Beispiel Wien:
UTM-Ost=602104m davon entfallen 600km
auf das Planquadrat (33UXP), der Rest von 2104m dient
als UTMREF X-KoordinateUTM-Nord=5340420m davon entfallen 5300km auf das Planquadrat (33UXP), der Rest von 40420m dient als UTMREF Y-Koordinate.
|
||||||||||||||||||||||||
UTMREF-DecodierungDie Interpretation einer kompletten UTMREF-Angabe ist aufwändig.Dazu zerlegt man den String in seine Bestandteile, so wie hier gezeigt: 2 Zeichen (Zahl 01..60) für die UTM Längen-Zone 1 Zeichen (C..X) für die UTM Breiten-Zone 2 Zeichen (A..Z) für das Planquadrat Der Rest darf nur aus einer geraden Anzahl von Ziffern bestehen. Man teilt ihn in 2 gleich lange Strings, aus denen X- und Y-Wert berechnet wird. |
Wesentlich einfacher ist die Interpretation, wenn sich alle verwendeten UTMREF-Angaben auf das gleiche Planquadrat beziehen - Es ist auf UTMREF-Karten angegeben. In diesem Fall sind mindestens die ersten 5 Zeichen aller UTMREF-Strings gleich. Man beachtet lediglich die rechts nachfolgenden Ziffern, teilt sie in 2 gleich lange Strings und verwendet die beiden Zahlen als X- und Y-Koordinate. |
||||||||||||||||||||||||
UTMREF Algorithmus Beispiel |
|
|
Das Beispiel zeigt eine vereinfachte
→ VBA-Funktion zur Berechnung von UTMREF aus Länge und Breite, die auch in
Excel verwendet werden kann. Argumente: Länge in Grad, Breite in Grad Optional ein Argument mode zur Steuerung der Genauigkeit: mode=1 ergibt 10km, usw. bis mode=5 für 1m |
Function utm_utmref(lon_deg As Double, lat_deg As Double, Optional mode As Integer = 5)
As String
Dim i, j, hx, hy, utm_z As Integer Dim utm_e, utm_n, xrest, yrest, div As Double Dim utmref, zf(3), zflat As String ' Initialisierung der Zonenfeld-Zeichen
zf(0) = "STUVWXYZ"zf(1) = "ABCDEFGH" zf(2) = "JKLMNPQR" zflat = "ABCDEFGHJKLMNPQRSTUV" ' optional mode
If mode < 1 Then mode = 1If mode > 5 Then mode = 5 div = 10 ^ (5 - mode) ' Zonenfeld
utm_z = utm_zone(lon_deg)utmref = Right("0" & CStr(utm_z), 2) utmref = utmref & utm_latzone(lat_deg) ' Planquadrat 100x100km Ost-Zeichen
i = utm_z Mod 3utm_e = lonlat_to_utme(lon_deg, lat_deg) hx = Int(utm_e / 100000) utmref = utmref & Mid(zf(i), hx, 1) xrest = Int(utm_e - hx * 100000) ' Planquadrat 100x100km Nord-Zeichen
utm_n = utm_lonlat_utmn(lon_deg, lat_deg)hy = Int(utm_n / 100000) i = hy Mod 20 If i <= 0 Then i = i + 20 If (utm_z Mod 2) = 0 Then j = 5
Else
j = 0
End Ifutmref = utmref & Mid(zflat, i + j + 1, 1) yrest = Int(utm_n - hy * 100000) ' X-Koordinate
xrest = Int(xrest / div)utmref = utmref & Right("00000" & xrest, mode) ' Y-Koordinate
yrest = Int(yrest / div)utmref = utmref & Right("00000" & yrest, mode) ' Rückgabe
utm_utmref = utmref
|
|
Zunächst werden die Strings zf()
und zflat für die Zonenfeld-Zeichen initialisiert. Danach wird das Argument mode zur Steuerung der Genauigkeit (Anzahl XY-Stellen) validiert und der dezimale Divisor div berechnet, der später zur Berechnung der XY-Stellen verwendet wird. |
|
| Nun werden die ersten 3 Zeichen (Zonenfeld) in der String-Variablen utmref zusammengestellt. Zur Berechnung von Längen-Zone (2 Ziffern) und Breiten-Zone (1 Buchstabe) werden die Funktionen utm_zone und utm_latzone verwendet, die bei den allgemeinen → UTM-Algorithmen vorgestellt wird. | |
| Das Ost-Zeichen des Planquadrats wird aus der UTM-Längen-Zone utm_z und dem UTM-Ost Wert utm_e berechnet. Als Nebenprodukt fällt die Anzahl ganzer 100km in der Variablen hx und der Rest der Ost-(X)-Koordinate xrest an. Funktion lonlat_to_utme wird bei den → Algorithmen zur Transformation von Grad nach UTM vorgestellt. | |
| Das Nord-Zeichen des Planquadrats wird aus dem UTM-Nord Wert utm_n berechnet, dabei fällt die Anzahl ganzer 100km hy und der Rest der Nord-(Y)-Koordinate yrest an. Funktion lonlat_to_utmn wird bei den Algorithmen zur Transformation von Grad nach UTM vorgestellt. | |
|
Zuletzt werden die numerischen XY-Koordinaten mit der
durch mode eingestellten Anzahl von Stellen angefügt. Die X-Ziffern werden aus dem Rest des UTM-Ost Werts xrest und dem Divisor div berechnet. Nicht verwendete Stellen werden mit Nullen gefüllt. Analog werden die Y-Ziffern aus dem Rest des UTM-Nord Werts yrest berechnet. |
|
|
Zuletzt wird der fertig zusammen gestellte String utmref
zurückgegeben. In der Live-Berechnung auf dieser Seite können sie die Javascript-Variante dieser Funktion ausprobieren. |
|
Algorithmen |
|
|
Dieses Beispiel in Visual Basic
(→ VBA)-Syntax
liefert die UTM-mil-Zone eines Punktes als Funktion seiner
Koordinaten Länge und Breite in Grad.
Das Ergebnis ist vom Typ String (Zeichenkette). Der Parameter mode steuert die Genauigkeit: mode=1 ergibt ein Gebiet 6°x4°, mode=2 ergibt 2°x1°, mode=3 ergibt 15'x15', alle anderen Werte arbeiten wie mode=3. Zunächst die Kennzahlen für Länge(i) und Breite (j) der Zone 6°x4° berechnet. Bei größerer Genauigkeit (mode>1) werden zunächst die Koordinaten der SW-Ecke (laenge, breite) der soeben berechneten Zone 6°x4° ermittelt. Danach wird die Differenz (rest) zwischen der Länge des Punktes und jener des Zonen-Eckpunkts berechnet, und daraus die Spalte (i) der Tabelle. Analog wird die Differenz aus den beiden Breiten-Werten berechnet, und daraus die Zeile (j) der Tabelle. Zuletzt wird aus Zeile und Spalte die Nummer der Zone 2°x1° (1..k..12) berechnet. Bei maximaler Genauigkeit (mode>2) wird das gleiche Verfahren noch um eine Stufe weitergeführt: Die Koordinaten der südwestlichen Ecke (laenge, breite) werden um die Werte der soeben berechneten Zone 2°x1° korrigiert. Danach werden die Differenzen der Längen- und Breiten-Werte gebildet und daraus die Spalte bzw. Zeile der Tabelle berechnet. Zuletzt wird aus Zeile und Spalte die Nummer der Zone 15'x15' (1..k..30) berechnet. |
Function utm_mil_name(lon_deg As Double, lat_deg As Double,
Optional mode As Integer = 3) As String
Dim s As String Dim i, j, k As Integer Dim lon, lat, rest As Double
If (mode < 1 Or mode > 3) Then mode = 3
End Function
s = "???" If (lon_deg> 180) Then lon_deg = lon_deg - 360 If (lon_deg>= -180 And lon_deg<= 180 And lat_deg>= -90 And lat_deg<= 90) Then
If lat_deg>= 0 Then
End Ifs = "N"
Else
s = "S"
End If
' Gebiet 6°x4°
lat_deg = Abs(lat_deg)j = Int(lat_deg / 4) + 65 s = s & Chr(j) i = utm_zone(lon_deg) s = s & " " & Right("0" & CStr(i), 2) If mode > 1 Then ' Gebiet 2°x1°
lon = i * 6 - 186
End Iflat = (j - 65) * 4 rest = lon_deg - lon i = Int(rest / 2) ' Spalte 0..2 rest = lat_deg - lat j = 3 - Int(rest) ' Zeile 0..3 k = j * 3 + i + 1 ' Nr 0..12 s = s & "-" & Right("0" & CStr(k), 2) If mode > 2 Then ' Gebiet 15'x15'
lon = lon + i * 2
End If
lat = lat + 3 - j ' spalte 0..7
rest = lon_deg - loni = Int(rest * 4) ' Spalte 0..7 rest = lat_deg - lat j = 3 - Int(rest * 4) ' Zeile 0..3 k = j * 8 + i + 1 ' Nr 0..12 s = s & "-" & Right("0" & CStr(k), 2) End If utm_mil_name = s |
|