Registriert seit: 19. Mai 2006
570 Beiträge
Delphi XE3 Professional
|
AW: Google ReverseGeocoding
9. Mär 2011, 10:51
Hallo MapMan,
guter Beitrag!
Vier kleine Anmerkungen: - 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... 
- 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. 
- 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'
- 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...

Geändert von Thom ( 9. Mär 2011 um 10:56 Uhr)
|
|
Zitat
|