Google Maps JavaScript API - Automatiser le Niveau de Zoom?
Je travaille avec plusieurs marqueurs de carte. Actuellement, je utiliser map.fitBounds(bounds);
dans mon JavaScript pour redimensionner la carte. limites contient plusieurs LatLng
objets.
Ce que je fais mal? Parce qu'il fait un zoom trop loin 🙁
Source JavaScript
var geocoder, map;
$(document).ready(function(){
var coll_gmap = $(".gmap");
if ( coll_gmap.length != 0 )
{
//initiate map
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 13,
center: latlng,
mapTypeControl: true,
navigationControl: true,
scaleControl: true,
navigationControlOptions: {style: google.maps.NavigationControlStyle.ZOOM_PAN},
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var bounds = new google.maps.LatLngBounds();
//loop all addressen + insert into map
map = new google.maps.Map(coll_gmap[0], myOptions);
coll_gmap.each(function(index)
{
if (geocoder) {
geocoder.geocode( { 'address': $(this).attr("address")}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
bounds.extend(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
} else {
console.log("Geocode was not successful for the following reason: " + status);
}//end if status
}); //end if geocoder.geocode
} //end if geocoder
}) //end coll_gmap each
map.fitBounds(bounds);
}//end if coll_gmap length
/* console.log("Script created by NicoJuicy");*/
}); //end onload
Source HTML
<div class="gmap" address="SomeAddress1" style="width:700px;height:350px"></div>
<div class="gmap" address="someAddress2"></div>
OriginalL'auteur NicoJuicy | 2010-07-14
Vous devez vous connecter pour publier un commentaire.
La
fitBounds()
méthode devrait fonctionner. Cependant, notez qu'il garde toujours une marge interne sur la taille de la carte. Considérons l'exemple suivant:Capture d'écran à partir de l'exemple ci-dessus:
Le rouge de la boîte englobante représente la
LatLngBounds
objet lorsqu'il est étendu avec les deux marqueurs. Notez que la carte de la toile est543px
large, et à noter également la marge de la marge à gauche et à droite de la boîte englobante.Maintenant, si l'on réduit la largeur de la carte en toile de juste
1px
, à l'aide de542px
, lefitBounds()
méthode pop à un plus faible niveau de zoom:Est-il possible de mettre à jour votre question avec un exemple complet qui reproduit votre problème? J'ai essayé de placer les marqueurs dans le même emplacement que le vôtre, et
fitBounds()
semble fonctionner beaucoup mieux dans mes captures d'écran.J'ai mis à jour ma source 🙂
Première upvote à un autre Malteser!
OriginalL'auteur Daniel Vassallo
Je suis arrivé ici à l'aide d'une "Relative" lien à droite, et je pense que la réponse à votre problème est le même que pour la question précédente. :p
Le voir, la chose est que chaque fois que vous utilisez une fonction qui les casseroles/faire un zoom sur la carte, le script ignore nouveau, similaire, de la saisie jusqu'à ce qu'il est prêt pour cela à nouveau. Par conséquent, vous avez pour détecter cela, et seulement appel fitBounds() quand elle est acceptée. Essayez de remplacer votre
avec
Bonne chance.
OriginalL'auteur LGT
J'ai trouvé la solution.
Au lieu de faire un seul
Chaque fois que vous ajoutez un myLatLng à vos limites, ces actions
Espère que cela aide quelqu'un!
OriginalL'auteur NicoJuicy
Suffit d'utiliser la setZoom fonction.
OriginalL'auteur VRC
}
OriginalL'auteur Asad Iftikhar