Voici ce que j'utilise pour afficher une carte avec 3 broches / marqueurs:
<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>
Ce que je recherche, c'est un moyen d'éviter d'avoir à trouver «manuellement» le centre de la carte avec center: new google.maps.LatLng(41.923, 12.513)
. Existe-t-il un moyen de centrer automatiquement la carte sur les trois coordonnées?
javascript
google-maps
google-maps-api-3
google-maps-markers
MultiformeIngegno
la source
la source
Réponses:
Il existe un moyen plus simple, en étendant un espace vide
LatLngBounds
plutôt que d'en créer un explicitement à partir de deux points. (Voir cette question pour plus de détails)Devrait ressembler à ceci, ajouté à votre code:
De cette façon, vous pouvez utiliser un nombre arbitraire de points et vous n'avez pas besoin de connaître l'ordre au préalable.
Démo jsFiddle ici: http://jsfiddle.net/x5R63/
la source
setZoom
APRÈSfitBounds
fitBounds
travaillé pour moi dans un bref test; faites-moi savoir si vous rencontrez toujours des problèmes.map.panToBounds(bounds);
est pour le zoom automatique.Je pense que vous devez calculer la latitudine min et la longitude min: Voici un exemple avec la fonction à utiliser pour centrer votre point:
la source
Pour trouver le centre exact de la carte, vous devrez traduire les coordonnées lat / lon en coordonnées pixel, puis trouver le centre du pixel et le reconvertir en coordonnées lat / lon.
Vous pourriez ne pas remarquer ou déranger la dérive selon la distance au nord ou au sud de l'équateur. Vous pouvez voir la dérive en faisant map.setCenter (map.getBounds (). GetCenter ()) à l'intérieur d'un setInterval, la dérive disparaîtra lentement à l'approche de l'équateur.
Vous pouvez utiliser ce qui suit pour traduire entre les coordonnées lat / lon et pixel. Les coordonnées des pixels sont basées sur un plan du monde entier entièrement zoomé, mais vous pouvez ensuite trouver le centre de celui-ci et le replacer en lat / lon.
la source
J'utilise la méthode ci-dessus pour définir les limites de la carte, puis, au lieu de réinitialiser le niveau de zoom, je calcule simplement le LAT moyen et le LON moyen et définit le point central à cet emplacement. J'additionne toutes les valeurs lat dans latTotal et toutes les valeurs lon dans lontotal, puis je divise par le nombre de marqueurs. J'ai ensuite défini le point central de la carte sur ces valeurs moyennes.
latCenter = latTotal / markercount; lonCenter = lontotal / markercount;
la source
j'ai eu une situation où je ne peux pas changer l'ancien code, alors j'ai ajouté cette fonction javascript pour calculer le point central et le niveau de zoom:
la source
Voici mon avis à ce sujet au cas où quelqu'un rencontrerait ce fil:
Cela aide à protéger contre les données non numériques détruisant l'une ou l'autre de vos variables finales qui déterminent
lat
etlng
.Il fonctionne en prenant toutes vos coordonnées, en les analysant en éléments séparés
lat
etlng
d'un tableau, puis en déterminant la moyenne de chacune. Cette moyenne devrait être le centre (et s'est avérée vraie dans mes cas de test.)la source