Die deutsche Google Maps Community.
Die Möglichkeiten sind da!
Forum Suche | Forum Übersicht | Anmerkung: registrierte Benutzer können sich über neue Einträge benachrichtigen lassen | Anmerkung: registrierte Benutzer können sich über neue Einträge benachrichtigen lassen
Übersicht ::
Google Maps API ::
Google Maps API ::
Ausblenden von Markern beim Reinzoomen in die Karte
moderiert von:
Steffen
Ausblenden von Markern beim Reinzoomen in die Karte |
||
|---|---|---|
| individual85 | verfasst: 21.02.2010, 19:21 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Hallo, ich habe die Karte auf meinem PC laufen. Hier ist das Beispiel dazu: http://www.cyberwizard.de/maps/marker4.html Meine Karte ist genauso aufgebaut. Mein Anliegen: Wenn ich jetzt die Karte verschiebe oder in sie hineinzoome und dabei ein Marker nicht mehr im Sichtfeld der Karte ist, soll der Link rechts in der Sidebar "Gehe zu Marker..." verschwinden. Erscheint der Marker wieder in der Karte soll er wieder in der Sidebar erscheinen. ich hoffe ihr könnt mir helfen. |
|
|
|
|
|
| Pil | verfasst: 03.03.2010, 15:34 | |
Häufiger hier
registriert: Jun. 2009
Beiträge: 16
Status: offline letzter Besuch: 20.09.10 |
Zuerst musst du feststellen, ob ein Marker im Viewport ist. Dazu schaust du am besten auf den Code eines Beispiels von Mike Williams http://econym.org.uk/gmap/basic14.htm Mit Hilfe der Methode containsLatLng() kannst du ermitteln, ob ein Marker im Viewport ist. Referenz: http://code.google.com/ap...nce.html#GLatLngBounds Etwa so: if (map.getBounds().containsLatLng(marker.getLatLng()) ) Das Aus- und Einblenden des Eintrags in der Sidebar ist dann nur noch eine HTML-Angelegenheit, die aber sicher nicht so einfach und schnell erledigt ist, wie du vielleicht meinst. Um das ganze sauber zu realisieren, muss nämlich die gesamte Sidebar neu aufgebaut und angeordnet werden, sobald ein Eintrag entfernt oder neu hinzugefügt wird, ansonsten klafft in ihr - beim Entfernen eines Eintrags - eine Lücke oder - beim Hinzufügen eines Eintrags - er wird ganz einfach immer nur unten angefügt (was beides vermutlich nicht unbedingt gewollt ist). |
|
|
|
|
|
| individual85 | verfasst: 04.03.2010, 16:57 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Hallo, ich habe es schon vor einer Weile zum Laufen bekommen. Ich danke dir trotzdem für deine Hilfe. Vielleicht kannst du mir bei einem anderen Problem helfen? Durch Bewegen der Karte werden die Daten in der Sidebar aktualisiert, aber die alten Daten wurden nicht gelöscht. Dies habe ich mit dem Befehl "moveend" beseitigt. Wenn ich einen Marker anklicke öffnet sich das InfowWindow, was ja so sein soll. Dadurch bewegt sich die Karte wieder und das InfoWindow wird wieder geschlossen. Wie kann ich das Schließen unterbinden? editiert von: individual85, 04.03.2010, 04:00 Uhr |
|
|
|
|
|
| Pil | verfasst: 04.03.2010, 17:10 | |
Häufiger hier
registriert: Jun. 2009
Beiträge: 16
Status: offline letzter Besuch: 20.09.10 |
Die API schließt das Infowindow nicht automatisch, wenn die Karte bewegt wird. Der Code zum Schließen des Infowindows muss also von dir stammen. Hört sich ein bißchen so an, als ob du etwas eingebaut hättest, das sich in gewissem Sinn widerspricht. |
|
|
|
|
|
| individual85 | verfasst: 05.03.2010, 11:23 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Du hattest Recht. Es lag an map.clearOverlays(); Danke nochmal für deine Hilfe. editiert von: individual85, 05.03.2010, 00:41 Uhr |
|
|
|
|
|
| individual85 | verfasst: 05.03.2010, 15:17 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Jetzt gibt es ein neues Problem. Der Marker und der Schatten des Markers werden beim Bewegen der Karte immer dunkler. Der Marker wird wohl neu geladen und durch das map.clearOverlay(); werden die alten Daten bzw. Icons nicht gelöscht. | |
|
|
|
|
| Pil | verfasst: 06.03.2010, 14:32 | |
Häufiger hier
registriert: Jun. 2009
Beiträge: 16
Status: offline letzter Besuch: 20.09.10 |
Das ist ein Hinweis darauf, - wie du bereits erkannt hast - dass über schon vorhandene Marker- und Schatten-Icons neue gelegt werden. Du solltest diejenigen Marker, die gelöscht werden sollen, vorher in einem Array speichern und dann bei Bedarf löschen. Das Script selbst muss immer auf dem Stand dessen gehalten werden, was auf der Karte zu sehen ist. Also, wenn du z.B. mit clearOverlays() alles, was zu sehen ist, entfernst, musst du zugleich auch alle gespeicherten Marker usw. löschen. |
|
|
|
|
|
| individual85 | verfasst: 08.03.2010, 13:28 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Ok, ich werde es versuchen hinzubekommen. Falls ich nicht weiterkommen sollte, würde ich mich sehr über deine Hilfe freuen. Ich melde mich wieder. Gruß, individual85 editiert von: individual85, 08.03.2010, 00:56 Uhr |
|
|
|
|
|
| individual85 | verfasst: 12.03.2010, 15:03 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Hallo, ich probiere schon die ganze Zeit rum. Ich krieg es einfach nicht hin. ich würde mich sehr über deine Hilfe freuen. Mein derzeitiger Code dazu: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Google Maps AJAX + MySQL/PHP Example</title> </head> <body onunload="GUnload()" onload="loadPointsFromXML()"> <form action="#" onsubmit="showAddress(this.address.value); return false">
<input type="checkbox" id="restaurantCheckbox" onclick="toggleGroup('restaurant')" checked /> Restaurants <input type="checkbox" id="barCheckbox" onclick="toggleGroup('bar')" checked /> Bars </form> //<![CDATA[ if (GBrowserIsCompatible()) { //Pruefe auf Browserkompatibilitaet var iconBlue = new GIcon(); //Icon iconBlue.image = 'http://labs.google.com/ri...images/mm_20_blue.png'; iconBlue.shadow = 'http://labs.google.com/ri...ages/mm_20_shadow.png'; iconBlue.iconSize = new GSize(12, 20); iconBlue.shadowSize = new GSize(22, 20); iconBlue.iconAnchor = new GPoint(6, 20); iconBlue.infoWindowAnchor = new GPoint(5, 1); var iconRed = new GIcon(); //Icon iconRed.image = 'http://labs.google.com/ri.../images/mm_20_red.png'; iconRed.shadow = 'http://labs.google.com/ri...ages/mm_20_shadow.png'; iconRed.iconSize = new GSize(12, 20); iconRed.shadowSize = new GSize(22, 20); iconRed.iconAnchor = new GPoint(6, 20); iconRed.infoWindowAnchor = new GPoint(5, 1); var customIcons = []; //Icon Array customIcons["restaurant"] = iconBlue; customIcons["bar"] = iconRed; var markerGroups = { "restaurant": [], "bar": []}; var map = new GMap2(document.getElementById("map")); //Erstellen der Karte mit Kontrollfunktionen map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); var geocoder = new GClientGeocoder(); map.setCenter(new GLatLng(47.614495, -122.341861), 13); document.getElementById("restaurantCheckbox").checked = true; document.getElementById("barCheckbox").checked = true; GEvent.addListener(map,"moveend", function(){loadPointsFromXML();}); function createMarker(point, name, address, type) { //Erstellen von Markern var marker = new GMarker(point, customIcons[type]); markerGroups[type].push(marker); //Marker im Array speichern var html = "" + name + "<\/b> " + address; GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); }); return marker; } function toggleGroup(type) { //Funktion für Checkbox -> Ausblenden/Einblenden Marker for (var i = 0; i < markerGroups[type].length; i++) { var marker = markerGroups[type][i]; if (marker.isHidden()) { marker.show(); } else { marker.hide(); } } } function loadPointsFromXML() { //Lesen der Daten von XML Datei var request = GXmlHttp.create(); request.open("GET", "php/phpsqlajax_genxml2.php", true); request.onreadystatechange = function() { if (request.readyState == 4) { var xmlDoc = request.responseXML; parseXML(xmlDoc); } } request.send(null); } function parseXML(xmlDoc) { //Uebergabe der Daten von XML an die Variablen var markers = xmlDoc.documentElement.getElementsByTagName("marker"); var bounds = map.getBounds(); //map.clearOverlays(); for (var i = 0; i < markers.length; i++) { var name = markers[i].getAttribute("name"); var address = markers[i].getAttribute("address"); var type = markers[i].getAttribute("type"); var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var marker = createMarker(point, name, address, type); map.addOverlay(marker); } } function showAddress(address) { //Suchfunktion ueber der Karte geocoder.getLatLng( address, function(point) { if (!point) { alert(address + " not found"); } else { map.setCenter(point, 13); } } ); loadPointsFromXML(); } } else { //Browser nicht kompatibel alert("Sorry, die Google Maps API ist nicht kompatibel mit diesem Browser"); } //]]> </body> </html> |
|
|
|
|
|
| Pil | verfasst: 12.03.2010, 15:54 | |
Häufiger hier
registriert: Jun. 2009
Beiträge: 16
Status: offline letzter Besuch: 20.09.10 |
Code kann man nicht debuggen. Ohne Link wird das nichts. In diesem Forum scheint recht wenig los zu sein, und ich finde meist nicht die Zeit, Fragen zu beantworten. Ich würde dir empfehlen, die Frage an die Maps-API-Group zu posten http://groups.google.com/group/Google-Maps-API/ Aber niemals vergessen, einen Link anzugeben und - wann immer möglich - keinen Code zu posten, wenn du tatsächlich Hilfe erhalten willst. |
|
|
|
|
|
| individual85 | verfasst: 15.03.2010, 11:54 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Hallo, hier ist jetzt der Link dazu. http://thomas.joomladev.d...el/phpsqlajax_map.html |
|
|
|
|
|
| individual85 | verfasst: 16.03.2010, 14:53 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Hier ist die Lösung für das Problem. Die Zeile map.clearOverlays ist jetzt wieder aktiv und verhindert das ständige Überlagern der Schatten bzw. Marker. Jetzt schließen sich aber automatisch die InfoWindow, wenn ich den Marker anklicke und die Karte sich bewegt. Dies verhindere ich jetzt mit den unteren beiden Zeilen. GEvent.addListener(map,"moveend", function(){ if (!map.getInfoWindow().isHidden()) { return;}); Nochmals großen Dank für deine Hilfe Pil. editiert von: individual85, 16.03.2010, 01:57 Uhr |
|
|
|
|
|
| individual85 | verfasst: 17.03.2010, 11:25 | |
Häufiger hier
registriert: Feb. 2010
Beiträge: 11
Status: offline letzter Besuch: 17.03.10 |
Soweit so gut. Wenn ich jetzt eine Checkbox durch Klick deaktiviere, zum Beispiel "Restaurants", werden die Marker "Restaurants" ausgeblendet. Bewege ich aber jetzt die Karte, werden sie wieder eingeblendet. Das liegt an "moveend". Mit welcher Funktion kann ich das Problem beheben? Ich müsste wohl sagen, wenn die Checkbox gecheckt ist, zeige die Marker, ansonsten blende sie aus. Ich weiß jedoch nicht so recht, wie ich es umsetzen soll bzw. ich bekomme es nicht hin. Ich wäre für jede Hilfe sehr dankbar. | |
|
|
|
|
User online:
Diese Angaben basieren auf den Useraktivitäten der letzten 10 Minuten