Hey Markus,
I hope that the mail has arrived.
Für alle anderen die Erklärung des Problems:
Google limitiert die Anzahl der Geocoding-Anfrage. Nach etwas 13 bis 15 Abfragen senden die Server die Meldung
und es wird für die Callback-Funktion kein Results-Objekt erzeugt. Dummerweise wird in der
Unit gmGeocoder in der Methode
TGeocoder.Callback dieser Umstand nicht getestet und es kommt im Debug-Modus zu einer Fehlermeldung (keine
Exception, da diese unterdrückt werden, weil bei
COM keine Exceptions nach außen dringen dürfen). Das heißt: Im Fehlerfall wird das eigene Programm gar nicht darüber informiert. Ganz ungeduldige können das Problem selbst beheben, indem sie die Methode
TGeocoder.Callback ändern:
Delphi-Quellcode:
procedure TGeocoder.Callback;
begin
if assigned(FCallback)
then
begin
try
if not VarIsNull(FCallbackFunction.Arguments[0])
then //<- to prevent exception (insert unit Variants in uses list)
begin
if assigned(FGeocoderResults)
then FGeocoderResults.Disp:=FCallbackFunction.Arguments[0]
else FGeocoderResults:=TGeocoderResults.Create(Script,FCallbackFunction.Arguments[0]);
FCallback(self,FGeocoderResults,FCallbackFunction.Arguments[1]);
end else
begin
FCallback(self,
nil,FCallbackFunction.Arguments[1]);
end;
except
{$IFDEF DEBUG}
ShowMessage(
Exception(ExceptObject).
Message);
{$ENDIF}
end;
end;
end;
Alle anderen warten einfach auf die neue Version des Frameworks.
Um viele Geocoding-Anfragen ohne Fehlermeldung durchführen zu können hat es sich bewährt, zwischen den einzelnen Abfragen etwas eine Sekunde Zeit zu lassen:
Eine andere Strategie wäre:
- Anfragen ohne Verzögerung bist OVER_QUERY_LIMIT
- Warten
- Letzte Anfrage wiederholen
- weiter mit 1