Dies ist, was ich benutze, um eine Karte mit 3 Stiften / Markierungen anzuzeigen:
<script>
function initialize() {
var locations = [
['DESCRIPTION', 41.926979, 12.517385, 3],
['DESCRIPTION', 41.914873, 12.506486, 2],
['DESCRIPTION', 41.918574, 12.507201, 1]
];
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: new google.maps.LatLng(41.923, 12.513),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var marker, i;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
}
}
function loadScript() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' + 'callback=initialize';
document.body.appendChild(script);
}
window.onload = loadScript;
</script>
<div id="map" style="width: 900px; height: 700px;"></div>
Was ich suche, ist eine Möglichkeit, um zu vermeiden, dass man die Mitte der Karte mit „manuell“ finden muss center: new google.maps.LatLng(41.923, 12.513)
. Gibt es eine Möglichkeit, die Karte automatisch auf die drei Koordinaten zu zentrieren?
javascript
google-maps
google-maps-api-3
google-maps-markers
MultiformeIngegno
quelle
quelle
Antworten:
Es gibt einen einfacheren Weg, indem Sie ein Leerzeichen erweitern,
LatLngBounds
anstatt eines explizit aus zwei Punkten zu erstellen. (Siehe diese Frage für weitere Details)Sollte ungefähr so aussehen, hinzugefügt zu Ihrem Code:
Auf diese Weise können Sie eine beliebige Anzahl von Punkten verwenden und müssen die Reihenfolge nicht vorher kennen.
Demo jsFiddle hier: http://jsfiddle.net/x5R63/
quelle
setZoom
AFTERfitBounds
fitBounds
ich in einem kurzen Test für mich gearbeitet habe. Lassen Sie mich wissen, wenn Sie immer noch Probleme haben.map.panToBounds(bounds);
ist für den automatischen Zoom.Ich denke, Sie müssen den Breitengrad min und den Längengrad min berechnen: Hier ist ein Beispiel mit der Funktion, mit der Sie Ihren Punkt zentrieren können:
quelle
Um die genaue Mitte der Karte zu finden, müssen Sie die Lat / Lon-Koordinaten in Pixelkoordinaten übersetzen und dann die Pixelmitte finden und diese wieder in Lat / Lon-Koordinaten konvertieren.
Je nachdem, wie weit Sie sich nördlich oder südlich des Äquators befinden, werden Sie die Abweichung möglicherweise nicht bemerken oder stören. Sie können die Drift sehen, indem Sie map.setCenter (map.getBounds (). GetCenter ()) innerhalb eines setInterval ausführen. Die Drift verschwindet langsam, wenn sie sich dem Äquator nähert.
Sie können Folgendes verwenden, um zwischen Lat / Lon- und Pixelkoordinaten zu übersetzen. Die Pixelkoordinaten basieren auf einer Ebene der ganzen Welt, die vollständig vergrößert ist. Sie können dann jedoch die Mitte finden und sie wieder in lat / lon umschalten.
quelle
Ich verwende die obige Methode, um die Kartengrenzen festzulegen. Anstatt die Zoomstufe zurückzusetzen, berechne ich einfach die durchschnittliche LAT und die durchschnittliche LON und setze den Mittelpunkt auf diese Position. Ich addiere alle lat-Werte zu latTotal und alle lon-Werte zu lontotal und dividiere dann durch die Anzahl der Marker. Ich habe dann den Kartenmittelpunkt auf diese Durchschnittswerte gesetzt.
latCenter = latTotal / markercount; lonCenter = lontotal / markercount;
quelle
Ich hatte eine Situation, in der ich alten Code nicht ändern kann. Deshalb habe ich diese Javascript-Funktion hinzugefügt, um den Mittelpunkt und die Zoomstufe zu berechnen:
quelle
Hier ist meine Meinung dazu, falls jemand auf diesen Thread stößt:
Dies schützt vor nicht numerischen Daten, die eine Ihrer endgültigen Variablen zerstören, die
lat
und bestimmenlng
.Dabei werden alle Ihre Koordinaten erfasst, in separate Elemente eines Arrays analysiert
lat
undlng
anschließend der Durchschnitt der einzelnen Koordinaten ermittelt. Dieser Durchschnitt sollte das Zentrum sein (und hat sich in meinen Testfällen als richtig erwiesen.)quelle