Thema: Delphi Google ReverseGeocoding

Einzelnen Beitrag anzeigen

Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Google ReverseGeocoding

  Alt 9. Mär 2011, 09:51
Hallo MapMan,

guter Beitrag!

Vier kleine Anmerkungen:
  1. Das Hauptfenster der Demo ist zu weit rechts und deshalb auf kleineren Bildschirmen (wie z.B. meinem Netbook mit 1024 Pixeln) nicht mehr sichbar (auch mein Windows XP bekommt das nicht hin, obwohl TForm1.Position:=poDefaultPosOnly eingestellt ist).
    Logischerweise funktioniert das in der Delphi-IDE auch nicht, wenn nicht mit eingebettetem Designer gearbeitet wird. Klar: Eine manuelle Eingabe von TForm1.Left tut's auch - sorgt aber erst einmal für einen kleinen Moment der Verwirrung...
  2. Du arbeitest bestimmt mit einem englischsprachigen Gebietsschema!? Die Zeile
    Delphi-Quellcode:
    s:=UTF8Decode(IdHTTP.Get(format(URL,[Latitude, Longitude])));
    //...
    formatiert nämlich normalerweise deutschsprachig und damit werden die Fließkommazahlen mit einem Komma, statt dem von Goggle erwartetem Punkt versehen:
    Code:
    http://maps.google.com/maps/api/geocode/json?latlng=50,35662,7,59566f&sensor=true
    Das mag Google nicht und liefert als Antwort
    Code:
    '{'#$A' "status": "ZERO_RESULTS",'#$A' "results": [ ]'#$A'}'#$A
    Da in der Demo keine Fehler ausgewertet werden, bekommt der Anwender auch nichts zu sehen - aus seiner Sicht passiert einfach nichts.
  3. Nach dem Icon Deiner Exe-Datei zu urteilen, arbeitest Du noch mit Delphi 7 und damit ohne Unicode. Mein Delphi XE produziert nämlich einige Warnungen:
    Code:
    [DCC Warnung] GoogleReverseGeocoding.pas(67): W1000 Symbol 'UTF8Decode' ist veraltet: 'Use UTF8ToWideString or UTF8ToString'
    [DCC Warnung] GoogleReverseGeocoding.pas(67): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'RawByteString'
  4. Dann hast Du auch noch zwei ungenutzte Variablen:
    Code:
    [DCC Hinweis] GoogleReverseGeocoding.pas(82): H2164 Variable 'Longitude' wurde deklariert, aber in 'TForm1.btnReverseGeocodeClick' nicht verwendet
    [DCC Hinweis] GoogleReverseGeocoding.pas(82): H2164 Variable 'Latitude' wurde deklariert, aber in 'TForm1.btnReverseGeocodeClick' nicht verwendet
Noch einige Tips für den Benutzer:
  • Man könnte fertige JSON (JavaScript Object Notation)-Parser zur Auswertung der Server-Antwort benutzen (gibt's auch für Delphi).
  • Oder man erzwingt in der Abfrage das XML-Format
    Code:
    http://maps.google.com/maps/api/geocode/xml?latlng=%3.8f,%3.8f&sensor=true
    und nutzt zur Auswertung die Komponente TXMLDocument oder irgend einen anderen XML-Parser.
  • Als Parameter sensor kann auch ohne Probleme der Wert false übergeben werden - schließlich besitzen wohl die wenigsten Computer einen GPS-Sensor. Außerdem ist das für die Abfrage völlig irrelevant und befriedigt nur die Neugierde von Google...
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom ( 9. Mär 2011 um 09:56 Uhr)
  Mit Zitat antworten Zitat