Home > Allgemeines > Maidenhead- in Geo-Koordinaten umrechnen

Maidenhead- in Geo-Koordinaten umrechnen

Basierend auf dem Artikel und dem entsprechenden Perl-Code:
http://en.wikipedia.org/wiki/Maidenhead_Locator_System

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Function LocatorToLatLong(locator as String) As String()
  dim grid() as String
  dim formatter as String
  dim lon, lat as Double
 
  grid = locator.Uppercase.Split("")
 
  lon = ((grid(0).Asc - Asc("A")) * 20) - 180
  lat = ((grid(1).Asc - Asc("A")) * 10) - 90
  lon = lon + ((grid(2).Asc - Asc("0")) * 2)
  lat = lat + ((grid(3).Asc - Asc("0")) * 1)
 
  if grid.Ubound >= 5 then
    'have subsquares
    lon = lon + ((grid(4).Asc) - Asc("A")) * (5/60)
    lat = lat + ((grid(5).Asc) - Asc("A")) * (2.5/60)
    'move to center of subsquare
    lon = lon + (2.5/60)
    lat = lat + (1.25/60)
    'not too precise
    formatter = "%.5f"
  else
    'move to center of square
    lon = lon + 1
    lat = lat + 0.5
    'even less precise
    formatter = "%.1f"
  end if
 
  return Array(Sprintf(formatter, lat), Sprintf(formatter, lon))
 
End Function

Funktion testen mit:

1
2
3
4
5
6
dim geo() as String
geo = LocatorToLatLong("BL11BH16")
MsgBox  "Longitude: " + geo(0) + EndOfLine + "Latitude: " + geo(1)
'Ausgabe:
'Longitude: 21,31250
'Latitude : -157,87500

Die sprintf() Funktion erhält man über das „StringUtils Module“ von „Joe’s REALbasic Page„:

http://www.strout.net/files/rb/stringutils.zip
(man benötigt lediglich die sprintf() und die repeat() Funktion daraus)

Bei Longitude sind negative Werte „South“, bei Latitude sind negative Werte „West“.

  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks