AW: Google Maps über COM (Component Object Model)
Hmmmmhh, passiert bei mir auch, auch wenn ich als Version die 3.23 oder 3.24 angebe.
Es sieht so aus, als ob alle, die nicht einen API-Key angeben, die Experimental Version ausgeliefert bekommen, in der dann vielleicht ein Fehler oder eine Inkompatibilität ist: If you are using a Maps API for Business client ID or you are on the premium plan, you will be provided with the release version by default. If you are on the standard plan or have no key nor clientid, you will be provided with the experimental release by default. |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 1)
Und wie kommt man an so einen API-Key?
[Edit] Hab jetzt einen API-Key von GOOGLE erhalten und den als Parameter mit angegeben ... bringt leider auch nix (siehe screenshot). |
AW: Google Maps über COM (Component Object Model)
Du hast jetzt als Version "3.2" angegeben. Was passiert mit 3.24 (Release) oder 3.23 (frozen)?
|
AW: Google Maps über COM (Component Object Model)
Ich hab natürlich alles mögliche probiert 3, 3.2, 3.20 - 3.25
Funktioniert nicht :cry: [Edit] Probiers selbst - den Key hab ich hierher: https://developers.google.com/maps/d...pt/get-api-key |
AW: Google Maps über COM (Component Object Model)
Jau, das gleiche Verhalten hier auch mit Key, mit neuer BaseURL (https://maps.googleapis.com/maps/api/js?) und ohne Sensor-Property.
Da bin ich mit meinem Latein auch erstmal am Ende... |
AW: Google Maps über COM (Component Object Model)
Hast du vielleicht eine Idee, wie man das näher debuggen kann?
|
AW: Google Maps über COM (Component Object Model)
Hi,
das script error Problem mit der onion.js tritt seit Map-Api V3.23 auf. Bis zum 3.Mai konnte man noch die alte V3.22 benutzen. Ab diesen Datum wird man automatisch auf die V3.23 von google umgeroutet. Die verwendete Api Version kann man sich wie folgt ausgeben lassen:
Code:
Wenn man nach dem Fehler bei Google sucht,
showmessage('Google Map-API: V'+Script.Google.Maps.Version);
findet man z.B. einen Lösungsansatz: Folgene Meta-Info soll in den Header eingebaut werden:
Code:
Damit bekomme ich aber einen Laufzeitfehler, wenn ich z.B. eine Distance Abfrage mache.
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Mit dem Meta-Tag
Code:
scheint es bei mir jetzt zu laufen.
<meta http-equiv="X-UA-Compatible" content="IE=8" />
PS:Hab jetzt mal in der gmApi.pas in Zeile 1408 vor "if LoadAPI then" das mit dem Meta auf IE=8 eingebaut Zitat:
mfg Wonderdoc |
AW: Google Maps über COM (Component Object Model)
Hi wonderdoc,
vielen Dank! Das "onion.js" Problem ist damit scheinbar gelöst. Es bleibt aber immer noch der Script-Fehler direkt nach dem Aufruf (external.OnAPILoaded - siehe Screenshot). Hat jemand eine Idee, was es damit auf sich hat? [Edit] OK, der Fehler ist weg, wenn man LoadAPI() statt LoadAPIAsync() aufruft, so wird der callback Aufruf vermieden - scheinbar hat GOOGLE hier was verändert. Allerdings funktioniert eine weitere Sache gar nicht mehr: MarkerClusterer Warum auch immer... es gibt keine Fehlermeldung, aber die Marker werden nicht mehr gruppiert :cry: [Edit2] Das hier scheint der Grund für das MarkerClusterer Problem zu sein: https://github.com/tomchentw/react-g...aps/issues/255 Allerdings bekomme ich die MarkerClusterer.pas vom Thom trotzdem nicht zum laufen. Hat hier jemand ebenfalls MarkerClusterer im Einsatz und kann mir den Trick verraten, wie es wieder funktioniert? Danke! |
AW: Google Maps über COM (Component Object Model) Panning Problem
Ich habe mit dieser Bridge ein sehr hilfreiches Programm geschrieben und bin begeistert von der Möglichkeit, aus Delphi Google Maps zu verwenden.
Ich habe nur ein kleines Problem: Wenn man die Karte mehrmals vergrößert und verkleinert hat, kan man das Kartenbild nicht mehr verschieben. (Die Schiebe-Hand hat dann dauernd die Form, die sie sonst nur während des Verschiebens annimmt). Mein Karteninterface ist weitgehend identisch zu version 2; Marker Simple. Gibt es ainen Ausweg? Vielen Dank! olaf43 |
AW: Google Maps über COM (Component Object Model)
Das liegt an den hier zuletzt diskutierten Auswirkungen der Umstellung auf die neue Version.
Stell mal die Eigenschaft "Silent" vom TWebBrowser auf "False" ... dann kommen die Fehlermeldungen! Pass deine gmApi.pas entsprechend an und nutze LoadAPI() statt LoadAPIAsync(), dann sollte es klappen. |
AW: Google Maps über COM (Component Object Model)
Hallo,
beim mir funktionieren Adressensuche und Routenberechnung nicht mehr. Es endet mit einer Exception in der Function
Delphi-Quellcode:
PropertyExists
Delphi-Quellcode:
Kann das noch jemand beobachten?
function TDispObject.PropertyExists(const Name: String): Boolean;
var DispID: Integer; begin Result:=GetDispID(FDisp,Name,DispID); end; |
AW: Google Maps über COM (Component Object Model)
Ja, ich habe laut diesem Thread https://code.google.com/p/gmaps-api-...detail?id=9004
den Header so erweitert: <meta http-equiv="X-UA-Compatible" content="IE=edge"> Danach bekomme ich den gleichen Dispatch-Fehler. Es scheint über JavaScript die Eigenschaft "length" abgefragt zu werden in Methode procedure TDirectionsServiceCallbackObject.Callback; Wie kann man den Fehler vermeiden? |
AW: Google Maps über COM (Component Object Model)
Hallo,
seit heute läuft der Aufruf der PanTo Methode in eine Exception
Delphi-Quellcode:
Script[j].Maps[0].PanTo(LatLng);
Edit: PanTo funktioniert solange kein Zoom vorher oder nachher aufgerufen wird Edit 2: Also das anlegen von Circles ist das Problem. Dieses führt zu einem Scriptfehler: http://maps.google.com/maps-api-v3/a...de_ALL/poly.js Dies hat bis gestern noch funktioniert Kann das jemand bestätigen? Gruß |
AW: Google Maps über COM (Component Object Model)
Bekomme auch einen poly.js Fehler seit heute ... allerdings beim Anlegen eines Polygons.
:( Edit: Der Fehler kommt nicht beim Erzeugen, sondern wenn man die Karte mit Poly.SetMap() oder Poly.Map:= zuordnet. Das Objekt selbst wid problemlos erzeugt und es kann auch darauf zugegriffen werden... nur die Karte kann nicht zugeordnet werden. Damit ist es aber natürlich unsichtbar - und damit das ganze witzlos :-( |
AW: Google Maps über COM (Component Object Model)
Ich habe das gleiche Problem mit poly.js,
lasse ich die Map-Zuweisung weg gibt es keinen Fehler mehr, aber auch keine Polylines auf der Karte. |
AW: Google Maps über COM (Component Object Model)
Ja, schöner Mist.
:evil: Habe jetzt mal die GMLib ausprobiert. Da ist zwar der letzte Stand immerhin vom September 2015 ... es tritt dort aber exakt der gleiche Fehler (Error in poly.js) auf! Und ausserdem ist die GMLib viel langsamer als Thoms Umsetzung. Hat jemand diese kostenpflichtige Lib hier (von TMS) mal ausprobiert? Oder weiss sonst jemand hier eine funktionierende Alternative? |
AW: Google Maps über COM (Component Object Model)
Hallo,
ich habe bei mir folgende Code-Zeilen angepasst - im Prinzip schon ähnlich hier im Thread beschrieben - ohne den echten Hintergrund zu verstehen. Nachdem kam der "Poly.js" Fehler nicht mehr.
Delphi-Quellcode:
Gruß DelphiFan2008{$IFDEF IE7_MODUS} Result:=Result+ ' <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE11" /> {$ENDIF} Result:=Result+ ' <meta http-equiv="X-UA-Compatible" content="IE=edge" />'; // ' <meta http-equiv="X-UA-Compatible" content="IE=8" />'; if LoadAPI then begin |
AW: Google Maps über COM (Component Object Model)
Hallo DelphiFan2008,
wenn ich auf "EmulateIE11" oder "edge" stelle gibt es eine AccessViolation bei mir. :cry: |
AW: Google Maps über COM (Component Object Model)
Ich habe schreibe jetzt nur noch folgende meta in der gmAPI.pas
Delphi-Quellcode:
IE7_MODUS ist auskommentiert.
Result:=Result+
' <meta http-equiv="X-UA-Compatible" content="IE=edge" />' So kann ich zumindest wieder circles auf die Karte zeichnen. Was nicht funktioniert: Sobald ich z.B. ein OnCLick
Delphi-Quellcode:
Event aufrufe (oder eine Adresssuche) läuft er beim aufruf von
GMap.OnClick := MapClick;
Delphi-Quellcode:
(BrowserTools.pas) in eine exception
FProc
Delphi-Quellcode:
(BrowserTools.pas)
function TExternalMethod.Call: Variant;
begin Result:=unassigned; try if assigned(FProc) then FProc //Aufruf der Objektmethode ohne Rückgabewert (Prozedur) else if assigned(FFunc) then Result:=FFunc; //Aufruf der Objektmethode mit Rückgabewert (Funktion) except {$IFDEF DEBUG} //Exceptions dürfen nicht nach außen dringen ShowMessage(FName+': '+Exception(ExceptObject).Message); {$ENDIF} end; end; |
AW: Google Maps über COM (Component Object Model)
Wie gesagt, mit "edge" oder "EmulateIE11" funktioniert das komplette Event-Handling nicht mehr und führt zu einer AccessViolation.
Ich habe jetzt mal spasseshalber die TMS VCL WebGMaps Komponente ausprobiert (v2.6.0.0 vom 06.10.2016) und festellen müssen, dass dort exakt der gleiche poly.js-Fehler auftritt! :evil: Hat jemand noch eine Idee? So wie es aussieht, gibt es wohl aktuell keine funktionierende Lösung mehr... :( |
AW: Google Maps über COM (Component Object Model)
Ich habe gerade die TMS-Version 2.6.0.0 "WebGMaps" als Trial unter XE7 ausprobiert,
zumindest das von mir benutzte Zeichen der Polylines (mit Pfeilsymbolen !!!) funktioniert einwandfrei und schnell :-D. Die (Custom-)Marker und Infowindows (auch mit HTML-Content) sind ebenfalls kurz angetestet und Ok :-D. |
AW: Google Maps über COM (Component Object Model)
Zitat:
Vielleicht auch an irgendwelchen Einstellungen des IE oder der Firewall. |
AW: Google Maps über COM (Component Object Model)
Ich habe nach den Fehlern dieser Komponente auf die TMS-GMaps gewechselt & das funktioniert wunderbar.
Dort gibt es zwar auch einige kleine Fehler, aber guten Support und zur Not eine Vorabversion. |
AW: Google Maps über COM (Component Object Model)
hallo tueddy,
ich überlege auch, auf die komponente von TMS zu wechseln... leider, muss ich sagen. würde die 100€ lieber dem Thom geben, wenn's dafür eine aktuelle version seines frameworks geben würde 8-) aber nach zwei jahren NULL reaktion seinerseits gehe ich mal davon aus, dass da nichts mehr kommen wird. kannst du mir sagen, ob bei TMS KeyDragZoom unterstützt wird? in der öffentlichen doku kann ich dazu nichts finden... und was sind die "kleineren fehler", die du entdeckt hast? danke! |
AW: Google Maps über COM (Component Object Model)
Zitat:
die kleineren Fehler sind gemeldet (Maps kann u.U. beim Laden hängen, fehlender Wert in Assign-Methode) aber noch veröffentlicht. Zu KeyDragZoom kann ich nichts sagen, das könntest Du über das Demo ausprobieren. Insgesamt läuft die Komponente aber recht stabil, ich bin zufrieden mit dem Umstieg. |
AW: Google Maps über COM (Component Object Model)
|
AW: Google Maps über COM (Component Object Model)
... hatte ich ausprobiert. die GMLib war für meine anforderungen viel zu langsam.
|
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
seit heute bekomme ich ein neues "Fehlverhalten". Nachdem die Karte geladen und korrekt angezeigt wird erscheint ein paar Sekunden später im Browser-Fenster die Fehlermeldung - siehe Anlage - und die Karte verschwindet zwangsläufig. Kennt jemand Abhilfe? Gruß DelphiFan2008 |
AW: Google Maps über COM (Component Object Model)
Hallo zusammen,
ich habe die Google Maps Units v2.1 nach den bekannten Problemen seit der Umstellung auf Google Maps API > 3.22 (entweder wegen onion.js oder poly.js-Fehlern o.ä.) wieder mit meinen Programmen unter Delphi X 10.1.2 Berlin zum Laufen gebracht. Es gibt einen recht ausführlichen Thread bei Google zu den vielfältigen Problemen und deren versuchten Lösungen unter https://issuetracker.google.com/issues/35827696. Entscheidend ist anscheinend das Konfigurieren des Emulationsmodus der WebBrowser-Komponente, die standardmäßig von Microsoft auf IE7 gesetzt ist, die aber von der Google Maps API wegen fehlenden JSON-Funktionalitäten nicht mehr unterstützt wird. Diesen Emulationsmodus kann man für seine Applikation in der Registry im USER-Hive auf höhere unterstützte IE-Emulationen setzen, was dann prompt bei mir auf verschiedenen Systemen mit Windows 10 (x86/x64) und Windows 7 (x64) auch funktioniert. Ich setze den Kompatibilitätseintrag in meiner Applikation (<Applikation.exe>) in FormCreate() unter: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULA TION mit Eintrag "<Applikation.exe>" mit Wert DWORD = "0x00002af9" Folgende Werte kann man für die Emulation wohl setzen (habe ich von einer MSDN-Seite):
Zusätzlich setzte ich standardmäßig in der generierten HTML-Page (in der unit gmAPI.pas), wie in früheren Einträgen schon diskutiert, einen Meta-Eintrag im Header mit: <meta http-equiv="X-UA-Compatible" content="IE=edge" />'; Ich hoffe, das hilft euch auch weiter. |
AW: Google Maps über COM (Component Object Model)
Hallo GPRSNerd,
mir ist dein Vorgehen nicht ganz klar - was trage/ändere ich in der eigenen Applikation? - was trage/ändere ich z.B. mit RegEdit direkt ein? - <Applikation.exe> mit komplettem Pfad oder nur den Namen? Gruß DelphiFan2008 |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anhang 47223 |
AW: Google Maps über COM (Component Object Model)
Zitat:
Shalom Manfred |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
mir ist schon klar das Thom seit geraumer Zeit nicht mehr Online ist, aber eventuell kann jemand helfen. Ich habe eine csv-datei mit ca. 570 Werten, von diesen möchte ich screenshots machen, doch es scheiter schon an:
Code:
Es wird ein Script-Fehler generiert(Siehe Grafik). Da auf einen 'externalen OnApiLoaded' verwiesen wird,
https://www.google.de/maps/@51.1758057,10.4541194,6z
scheint es hier einen Fehler zu geben:
Delphi-Quellcode:
Achso, die csv-datei wird in eine ListView(Report) geladen und durch Doppelclick der Timer gestartet,
...
procedure TForm1.GeoListViewDblClick(Sender: TObject); begin FCurrentIndex := GeoListView.ItemIndex; RunTimer.Enabled := ((GeoListView.Items.Count > 0) and (FScreenShotPath <> EmptyStr)); end; procedure TForm1.ItsTime(Sender: TObject); begin RunTimer.Enabled := False; if Script=nil then with TScript.Create(WebBrowser1) do LoadAPIAsync(InitMap); end; procedure TForm1.InitMap(Sender: TObject); function StrToDouble(Value : String) : Double; begin Result := StrToFloat(StringReplace(Value, '.', ',', [rfReplaceAll, rfIgnoreCase])); end; var MyOptions : TMapOptions; LI : TListItem; Latitude : Double; Longitude : Double; ZoomF : Integer; TypeID : Byte; Url : String; begin LI := GeoListView.Items[FCurrentIndex]; if ((LI.SubItems[3] = EmptyStr) and // Latitude (LI.SubItems[4] = EmptyStr) and // Logitude (LI.SubItems[5] = EmptyStr)) then // Zoom begin Url := Copy(LI.SubItems[0], POS('@', LI.SubItems[0]) + 1, Length(LI.SubItems[0])); Latitude := StrToDouble(Copy(Url, 1, POS(',', Url) - 1)); Url := Copy(Url, POS(',', Url) + 1, Length(Url)); Longitude := StrToDouble(Copy(Url, 1, POS(',', Url) - 1)); Url := Copy(Url, POS(',', Url) + 1, Length(Url)); ZoomF := Round(StrToDouble(Copy(Url, 1, POS('z', Url) -1))); end else begin Latitude := StrToDouble(LI.SubItems[3]); Longitude := StrToDouble(LI.SubItems[4]); ZoomF := Round(StrToDouble(Copy(LI.SubItems[5], 1, POS('z', LI.SubItems[5]) -1))); end; TypeID := Ord(LI.SubItems[6][1]); with TScript(Sender) do begin MyOptions := TMapOptions.Create; with MyOptions do begin Zoom := ZoomF; Center := New(Google.Maps.LatLng(Latitude, Longitude)); case TypeID of 72 : MapTypeID := Google.Maps.MapTypeID.Hybrid; 82 : MapTypeID := Google.Maps.MapTypeID.Roadmap; 83 : MapTypeID := Google.Maps.MapTypeID.Satellite; 84 : MapTypeID := Google.Maps.MapTypeID.Terrain; end; end; New(Google.Maps.Map(MyOptions)); end; end; der FEATURE_BROWSER_EMULATION Eintrag ist vorhanden. Wie müsste ich es anders machen? |
AW: Google Maps über COM (Component Object Model)
Der Aufruf darf nicht mehr über LoadAPIAsync() gemacht werden, sondern über LoadAPI():
Delphi-Quellcode:
PS: Ich habe die Funktion überladen, evtl. stimmen meine Parameter nicht mehr mit dem Standard überein.
//LoadAPIAsync(InitMap,
LoadAPI (InitMap, DefaultLanguage, DefaultRegion, GMapBrowserKey, GMapAPIVersion, GMapIEVersion); |
AW: Google Maps über COM (Component Object Model)
Zitat:
Könntest du kurz darauf eingehen warum nun nur LoadAPI genutzt werden soll. Danke. |
AW: Google Maps über COM (Component Object Model)
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo
Ich versuche das Framework von Thom in Rad Studio XE 10.2 Tokyo zu installieren. Dazu habe ich das file gmConfig.inc upgedated. Leider gibt es dann einen Compilation error mit Studio XE 10.2 Tokyo, wenn ich versuche den Source in meine Programme einzubinden. Vielleicht ist es ein Fehler im gmConfig.file, vielleicht auch nicht. Kann jemand das File testen? Im Bild 1 ist der Compilation error als Screenshot zu sehen. Bin für jeden Hinweis dankbar. Der Compilationsfehler [dcc32 Fehler] GoogleMaps_Unit1.pas(2694): E2010 Inkompatible Typen: 'TMapEventEvent' und 'Procedure' hängt vielleicht mit {$IFDEF USE_ANONYMOUS_METHODS} zusammen. Der Fehler tritt auf in dieser Procedure:
Code:
mfg Peter
procedure AttachSecretMessage(Marker: TMarker; Num: Integer);
var //{$IFDEF USE_ANONYMOUS_METHODS} InfoWindow: TInfoWindow; //{$ENDIF} InfoWindowOptions: TInfoWindowOptions; var callString : string; begin with Script do begin InfoWindowOptions:=TInfoWindowOptions.Create; InfoWindowOptions.Content := MBParams[ActiveFilter,Num]; InfoWindow := gmAPI.New(Google.Maps.InfoWindow(InfoWindowOptions)); Marker.OnClick := procedure(Sender: TObject; Event: TEvent) begin InfoWindow.Open(Marker.GetMap,Marker); callString := 'GM '+MBParams[ActiveFilter,Num]; actualSite := MBParams[ActiveFilter,Num]; if(ClipboardCB=True) then begin Clipboard.AsText := actualSite; end else begin RunProg.RunProgramWaiting(progPath, '',callString); end; end; end; end; |
AW: Google Maps über COM (Component Object Model)
Ich hatte in Post #479 mal eine aufwärtskompatible gmconfig.inc hochgeladen, die bei mir seitdem mit allen neuen IDEs ohne Anpassungen funktioniert:
http://www.delphipraxis.net/1333914-post479.html |
AW: Google Maps über COM (Component Object Model)
Vielen Dank für die versionsunabhängige gmConfig. Leider compiliert es nicht. Eigentlich sollte laut gmConfig die USE_ANONYMOUS_METHODS definiert sein,
aber InfoWindow ist undefiniert. Wenn ich die beiden conditionalen Abfragen auskommentiere, ist zwar InfoWindow definiert, aber der zuletzt aufgetretene Fehler kehrt zurück:
Code:
Der Compilationsfehler: [dcc32 Fehler] GoogleMaps_Unit1.pas(2694): E2010 Inkompatible Typen: 'TMapEventEvent' und 'Procedure'.
procedure AttachSecretMessage(Marker: TMarker; Num: Integer);
var //{$IFDEF USE_ANONYMOUS_METHODS} InfoWindow: TInfoWindow; //{$ENDIF} InfoWindowOptions: TInfoWindowOptions; var callString : string; begin with Script do begin InfoWindowOptions:=TInfoWindowOptions.Create; InfoWindowOptions.Content := MBParams[ActiveFilter,Num]; InfoWindow := gmAPI.New(Google.Maps.InfoWindow(InfoWindowOptions)); Marker.OnClick := procedure(Sender: TObject; Event: TEvent) begin InfoWindow.Open(Marker.GetMap,Marker); callString := 'GM '+MBParams[ActiveFilter,Num]; actualSite := MBParams[ActiveFilter,Num]; if(ClipboardCB=True) then begin Clipboard.AsText := actualSite; end else begin RunProg.RunProgramWaiting(progPath, '',callString); end; end; end; end; Wenn ich mit XE8 compiliere tritt der Fehler nicht auf. mfg Peter |
AW: Google Maps über COM (Component Object Model)
Den Fehler hatte ich in der Vergangenheit auch mal, hängt mit der Reihenfolge des uses-Anweisungen zusammen: HTMLObjects muss nach gmEvents eingebunden werden, ich hatte in meiner App sogar noch einen Kommentar dahinter, siehe unten:
Delphi-Quellcode:
uses
//GoogleMaps-API BrowserTools, gmBase, gmAPI, gmMap, gmOverlaysPolylinePolygon, gmOverlaysMarker, gmOverlaysBase, gmEvents, HTMLObjects, //immer als letztes da sonst Marker.OnClick nicht geht |
AW: Google Maps über COM (Component Object Model)
Danke für die Antwort.
Leider hat das Einhalten Deiner Reihenfolge keinen Einfluß auf den Compilationsfehler von oben. mfg Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz