GEO-Koordinaten


Die in den Exif-Daten eines Bildes hinterlegten geografischen Koordinaten können ausgelesen werden mit:
Laengengrad = FF_GetExifTag("Longitude")
Breitengrad = FF_GetExifTag("Latitude")
 
Die Geografischen Koordinaten (wie FixFoto sie aus den Exif-Daten ausliest) können in Dezimalkoordinaten (wie z. B. Google Maps sie erwartet) umgerechnet werden.

VBS
'********************************************
'* grad2decimal wandelt ° ' " in dezimal
'********************************************
function grad2decimal(ByVal p_Str)
    dim l_Richtung
    dim l_Pos
    dim l_Wert
    dim Gebietsschema
 
    if p_Str<>"" then
        Gebietsschema = GetLocale                                   ' Gebietsschema des Systems ermitteln
        if Gebietsschema <> 2055 and Gebietsschema <>  5127 Then    ' nicht Schweiz oder Lichtenstein, weil dort auch der Punkt gilt
            p_Str=replace(p_Str,".",",",1)                          ' Punkt durch Komma ersetzen
        End If
        l_Richtung=left(p_Str,1)
        p_Str=ltrim(right(p_Str,len(p_Str)-1))
        l_Pos=instr(p_Str,"°")
        l_Wert=1.0*(left(p_Str,l_Pos-1))
        p_Str=ltrim(right(p_Str,len(p_Str)-l_Pos))
        l_Pos=instr(p_Str,"'")
        l_Wert=l_Wert + (left(p_Str,l_Pos-1))/60
        p_Str=ltrim(right(p_Str,len(p_Str)-l_Pos))
        l_Pos=instr(p_Str,"""")
        l_Wert=l_Wert + (left(p_Str,l_Pos-1))/3600
        Select Case l_Richtung
            Case "s", "S", "w", "W"
                grad2decimal="-" & replace(FormatNumber(l_Wert,6),",",".",1)
            case Else
                grad2decimal=replace(FormatNumber(l_Wert,6),",",".",1)
        End Select
    else
        grad2decimal=""
    end if
 
end function
 

JScript
function grad2decimal(tlat)
{
 var dec = parseFloat(tlat.substr(1));
 dec += parseFloat(tlat.substr(tlat.indexOf("°")+1)) / 60;
 dec += parseFloat(tlat.substr(tlat.indexOf("'")+1)) / 3600;
 if(tlat.charAt(0).toUpperCase() == "S") dec = -dec;
 if(tlat.charAt(0).toUpperCase() == "W") dec = -dec;
 return dec;
}
 
function decimal2grad(lat,c1,c2)
{
 var d,m,s,lats;
 if (lat<0)
  { c1=c2; lat=Math.abs(lat); }
 d=Math.floor(lat);
 m=Math.floor((lat-d) *60);
 s=Math.floor(((((lat-d) *60)-m)*60)*100)/100
 return  c1 +d+"°"+m+"\'"+s+"\"";
}
 
// Testroutine
// Aus Goggle Earth entnommen
Lat_grad =  "N5254\'29.29\""
Lon_grad =  "E1035\'58.52\""
 
// hieraus Decimaldarstellung ausrechnen
Lat2_dec = grad2decimal(Lat_grad);
Lon2_dec = grad2decimal(Lon_grad);
 
// und wieder zu Grad zurück
Lat2_grad = decimal2grad(Lat2_dec,"N","S");
Lon2_grad = decimal2grad(Lon2_dec,"E","W");
 
// Anzeigen
ff_MessageBox("Grad\t\t= "    + Lat_grad  +" " + Lon_grad + "\r\n"+
              "=>Decimal\t= " + Lat2_dec  +" " + Lon2_dec + "\r\n"+
              "=>Grad\t\t= "  + Lat2_grad +" " + Lon2_grad,1);
 
 

Konvertierung von Dezimalkoordinaten in Geografische Koordinaten:
VBS
'**************************************************
'* decimal2grad wandelt dezimal in ° ' " um
'* erwartet die Dezimalkoordinate und
'* True für Breitengrad bzw. False für Längengrad
'**************************************************
Function decimal2grad (ByVal dezkoord, breite)
    Dim Richtung
    Dim Grad, Minuten, Sekunden
    if breite = true Then            ' Breiten
        'westliche Breite und südliche Länge haben negativ Dezimalkoordinaten
        if InStr(dezkoord,"-") > 0 Then
            Richtung = "S"
        Else
            Richtung = "N"
        End If
    Else                    ' Länge
        if InStr(dezkoord,"-") > 0 Then
            Richtung = "W"
        Else
            Richtung = "E"
        End If
    End If
    dezkoord = Replace(dezkoord,".",",")    ' wegen Zahlenformat Punkt durch Komma ersetzen
    Grad = Abs(Fix(dezkoord))        ' pos. Ganzzahl ermitteln
    Minuten = (Abs(dezkoord)-Grad)*60
    Sekunden = (Minuten - Fix(Minuten)) * 60
    Minuten = Fix(Minuten)
    decimal2grad = Richtung & " " & FormatNumber(Grad,2) & "° " & FormatNumber(Minuten,2) & "' " &  FormatNumber(Round(Sekunden,2),2) & Chr(34)
    decimal2grad = Replace(decimal2grad,",",".")
End Function


Beispiele für Google Maps-Aufrufe

a) dynamische Googe Maps

Syntax: http://www.joerg-buchwitz.de/temp/googlemapssyntax.htm

z.B. Flugfeld Berlin Tempelhof (Breite: N 52.00° 28.00' 40.75" = 52.477986; Länge: E 13.00° 23.00' 53.60" = 13.398222), Aufruf des Browsers als externes Programm
VBS
BreiteGeo = "52.477986"
LaengeGeo = "13.398222"
URL = "http://maps.google.de/?q=" & BreiteGeo & "," & LaengeGeo
 
Dim oWSHShell
Set oWSHShell = CreateObject("WScript.Shell")
oWSHShell.Run URL
 

b) Nutzung der Static Maps API

z.B. Flugfeld Berlin Tempelhof (Breite: N 52.00° 28.00' 40.75" = 52.477986; Länge: E 13.00° 23.00' 53.60" = 13.398222; Hybridkarte, Zoomfaktor 14, mit blauer Markierung A)
http://maps.google.com/maps/api/staticmap?&size=640x640&maptype=hybrid&markers=color:blue|size:normal|label:A|52.477986,13.398222|52.477986,13.398222|&zoom=14&sensor=false

Der Aufruf der URL im Browser wird unter dem Stichwort "externes Programm" beschrieben.