Einzelnen Beitrag anzeigen

Thom

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

AW: Google Maps über COM (Component Object Model)

  Alt 2. Okt 2011, 12:37
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
Code:
OVER_QUERY_LIMIT
screenshot_1.jpg
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:
screenshot_2.jpg

Eine andere Strategie wäre:
  1. Anfragen ohne Verzögerung bist OVER_QUERY_LIMIT
  2. Warten
  3. Letzte Anfrage wiederholen
  4. weiter mit 1
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom ( 3. Okt 2011 um 09:42 Uhr)
  Mit Zitat antworten Zitat