Hallo,
weiß vielleicht jemand, wie ich aus geographischen Koordinaten eines Punktes (Mittelpunkt eines Rasterbildes), programmatisch die UTM-Zone ermitteln kann?
Bin für jede Hilfe dankbar
Uli
weiß vielleicht jemand, wie ich aus geographischen Koordinaten eines Punktes (Mittelpunkt eines Rasterbildes), programmatisch die UTM-Zone ermitteln kann?
Bin für jede Hilfe dankbar
Uli
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Gast am Mi., 20.04.2005 - 21:24
PermalinkÖhmm, mit geographischen Koordinaten meinst Du Längen- und Breitengrad und Dir geht es um die Zonen-Bezeichnung??
Bin mir nicht ganz sicher, ob das mit der Nomenklatur wirklich überall so "errechenbar" ist - glaube es gibt auch ein paar Ausnahmen z.B. in Norwegen? -, soweit ich weiß ergibt sich der Name der Projektionszone i.d.R. aber einfach aus 6°-breiten und 8°-Grad hohen Streifen, wobei einmal bei 180°W/180°E mit der Numerierung angefangen wird (i.e. -180 bis +180, Nummer 1-60) einmal bei 80°S (i.e. -80 bis +84(!), Buchstaben C-X, ohne I und ohne O).
Längen und Breitengrad sollten Dir ja bereits aus Deinen Point.X resp. Point.Y -Koordinaten bekannt sein.
Dann könnte das ganze recht simpel so aussehen:
Public Function GetUTMZoneFromLongLat(Longitude As Double, Latitude As Double) As String
Dim strLat As String
If Longitude < -180 Or Longitude > 180 Then
'exit function / DeineFehlerbehandlung
End If
If Latitude > 84 Or Latitude < -80 Then
'exit function / DeineFehlerbehandlung
End If
Longitude = Int((Longitude + 180) / 6) + 1
Latitude = Int((Latitude + 80) / 8) + 1
Select Case Latitude
Case 1
strLat = "C"
Case 2
strLat = "D"
Case 3
strLat = "E"
Case 4
strLat = "F"
Case 5
strLat = "G"
Case 6
strLat = "H"
Case 7
strLat = "J"
Case 8
strLat = "K"
Case 9
strLat = "L"
Case 10
strLat = "M"
Case 11
strLat = "N"
Case 12
strLat = "P"
Case 13
strLat = "Q"
Case 14
strLat = "R"
Case 15
strLat = "S"
Case 16
strLat = "T"
Case 17
strLat = "U"
Case 18
strLat = "V"
Case 19
strLat = "W"
Case 20, 21
strLat = "X"
End Select
GetUTMZoneFromLongLat = CStr(Longitude & strLat)
End Function
Der Aufruf:
msgbox GetUTMZoneFromLongLat (9,51)
sollte Dir dann z.B. "32U" zurückgeben.
Viele Grüße
Jörg Ostendorp
PS: Es wäre einfacher wenn Du mal im richtigen Forum posten würdest :-)
so läßt sich eigentlich nur anhand Deiner bisherigen Threads mutmaßen, das Du
VBA und nicht in Avenue verwendest.
Gespeichert von Gast am Do., 21.04.2005 - 11:35
Permalinkerst mal vielen Dank für Deine Hilfe.
Habe es selbst schon hinbekommen. Die Funktion war tatsächlich ziemlich einfach. Etwas lästig waren die Ausnahmen, so gibt es spezielle UTM Zonen zwischen 0° und 36° Länge oberhalb 72° Breite, und eine spezielle Zone 32 zwischen 56° und 64° nördlicher Breite. Aber auch das war im Prinzip kein Problem.
Viele Grüße
Uli
PS: Ich verwende VBA und was für ein richtiges Forum?
Gespeichert von Gast am Do., 21.04.2005 - 12:10
Permalinkmagst Du nicht vielleicht Deine Funktion "für die Nachwelt" hier hereinstellen?
Viele Grüße
Jörg Ostendorp
PS: Forum "ArcView 8.x/ArcGis" (Du hattest unter "GIS general" geschrieben, was hinsichtlich Deiner Programmiersprache halt alles mögliche bedeuten kann. Möglicherweise hat der ein oder die andere keine Lust, zunächst noch eine entsprechende Rückfrage zu stellen und antwortet Dir daher erst gar nicht. (Wollte nur drauf hinweisen)).