google maps bounds haben falschen wert
goodi
- javascript
Hallo!
Zuerst mal ein ausschnitt aus meinem Script:
var bounds = new google.maps.LatLngBounds();
downloadUrl("googlemaps/markerxml.php?filter="+filter, function(data) {
var markers = data.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
bounds.extend (latlng);
var marker = new google.maps.Marker({position: latlng, map: map, title: markers[i].getAttribute("firma"), html: markers[i].getAttribute("firma")+"<br/>"+markers[i].getAttribute("address")});
map.fitBounds (bounds);
google.maps.event.addListener(marker, 'click', function () {
// where I have added .html to the marker object.
infowindow.setContent(this.html);
infowindow.open(map, this);
});
}
});
alert(bounds.toString());
alert(bounds.toString());
Das Problem ist dabei, dass beim ersten mal "alert(bounds.toString());" immer "((1, 180), (-1, -180))" ausgegeben wird und beim zweiten mal die richtigen Werte. Lasse ich den alert weg, wird im restlichen Script mit den falschen Werten weiter gearbeitet.
Wodurch entsteht das Problem bzw. wie kann man es beheben?
Vielen Dank im Voraus!
Wodurch entsteht das Problem bzw. wie kann man es beheben?
Du darfst den Geocoder afaik nur 1x pro Sekunde (und maximal 2500 mal Pro Tag) befragen, wenn du das Limit überschreitest, bekommst du nur "leere" Koordinaten zurück (0,0) die die Bounds dann verzerren.
Im Falle von Europa heisst das, dass der Kartenausschnitt um deine Standorte dann nicht schön z.B. um Bayern herum ist sondern irgendwo um Europa und Nordafrika.
Wenn du jetzt aber alerts einbaust, gibt es "Pausen" zwischen den Anfragen und du bekommst wieder Ergebnisse.
In deinem Fall sehe ich aber keinen Geocoder - ggf. ist der an anderer Stelle in deinem Script eingebaut?
Hallo goodi,
downloadUrl lädt asynchron, Stichwort AJAX. Die Bounds werden erst gesetzt, nachdem die Datei geladen ist, die Alerts kommen aber direkt nach dem "Initiieren" des Downloads. Zu diesem Zeitpunkt ist der Download aber noch nicht abgeschlossen, bzw. wird erst abgeschlossen, während du auf OK klickst. Alles was mit den Daten gemacht werden soll, muss in der Callback-Funktion von downloadUrl geschehen bzw. aus dieser aufgerufen werden.
Gruß, Jürgen