45 votes

Google map V3 Définir le centre sur un marqueur spécifique

J'utilise Google Map V3 pour afficher une liste de marqueurs extraits d'une base de données, en utilisant MYsql et PHP. MES marqueurs sont définis sur la carte en utilisant l'adresse complète (de DB, y compris le code postal) car je n'ai pas les informations Long, Lat Tout fonctionne bien, MA boucle se présente comme suit

 while...
Addmarker(map,'MY ADdress','Title');
end while;

Maintenant, je voudrais définir la carte sur un marqueur spécifique contenu dans la boucle qui correspondra à un code postal précédemment entré. Comment puis-je placer la carte au centre de ce marqueur et ouvrir la fenêtre d'information ?

66voto

6twenty Points 812

Une fois que vous avez des marqueurs sur la carte, vous pouvez récupérer les coordonnées Lat/Long via l'API et l'utiliser pour définir le centre de la carte. Vous devrez d'abord déterminer sur quel marqueur vous souhaitez vous centrer - je vous laisse le choix.

 // "marker" refers to the Marker object you wish to center on

var latLng = marker.getPosition(); // returns LatLng object
map.setCenter(latLng); // setCenter takes a LatLng object

Les fenêtres d'informations sont des objets séparés qui sont généralement liés à un marqueur, donc pour ouvrir la fenêtre d'informations, vous pouvez faire quelque chose comme ceci (cependant cela dépendra de votre code) :

 var infoWindow = marker.infoWindow; // retrieve the InfoWindow object
infoWindow.open(map); // Trigger the "open()" method

J'espère que cela t'aides.

40voto

Eddie Points 1222

Pour m'appuyer sur la réponse de @ 6twenty... Je préfère panTo(LatLng) à setCenter(LatLng) car panTo s'anime pour une transition plus fluide vers le centre "si le changement est inférieur à la fois à la largeur et à la hauteur de la carte". https://developers.google.com/maps/documentation/javascript/reference#Map

Ce qui suit utilise l'API Google Maps v3.

 var marker = new google.maps.Marker({
    position: new google.maps.LatLng(latitude, longitude),
    title: markerTitle,
    map: map,
});
google.maps.event.addListener(marker, 'click', function () {
    map.panTo(marker.getPosition());
    //map.setCenter(marker.getPosition()); // sets center without animation
});

20voto

Alex Points 13

Cela devrait faire l'affaire!

 google.maps.event.trigger(map, "resize");
map.panTo(marker.getPosition());
map.setZoom(14);

Vous aurez besoin d'avoir vos cartes globales

2voto

papps Points 41

peut-être que cela aidera:

 map.setCenter(window.markersArray[2].getPosition());

toutes les informations sur les marqueurs sont dans le tableau markersArray et elles sont globales. Vous pouvez donc y accéder de n'importe où en utilisant window.variablename. Chaque marqueur a un identifiant unique et vous pouvez mettre cet identifiant dans la clé du tableau. donc vous créez un marqueur comme ceci :

 window.markersArray[2] = new google.maps.Marker({
            position: new google.maps.LatLng(23.81927, 90.362349),          
            map: map,
            title: 'your info '  
        });

J'espère que cela aidera.

1voto

alpc Points 31
geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
          map: map,
          position: results[0].geometry.location
      });
    } else {
      alert('Geocode was not successful for the following reason: ' + status);
    }
  });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X