2010-03-11 2 views
3

Je travaille avec google map. Selon les exigences, je dois définir un niveau de zoom différent qui dépend de ma requête de recherche. S'il y a plusieurs endroits sur la carte dans le pays, alors la carte devrait cibler le pays. Autre scénario: s'il existe différents emplacements marqués dans une ville, la carte doit être centrée sur le niveau de la ville.Comment définir dynamiquement le niveau de zoom personnalisé de google map?

Répondre

4
var geoCoder = new GClientGeocoder(); 
geoCoder.setViewport(map.getBounds()); 
geoCoder.getLocations('searchquery', function(latlng) { 
    if(latlng.Placemark.length > 0) { 
    var box = latlng.Placemark[0].ExtendedData.LatLonBox; 
    var bounds = new GLatLngBounds(new GLatLng(box.south, box.west), new GLatLng(box.north, box.east)); 
    var center = new GLatLng(box.Placemark[0].Point.coordinates[1], latlng.Placemark[0].Point.coordinates[0]); 
    var zoom = oMap.getBoundsZoomLevel(bounds); 
    map.setCenter(center, zoom); 
    } 
}); 

Je pense que la partie clé de ce pour vous est

//box is a LatLonBox with the size of your resultquery. You can create this yourself as well 
var box = latlng.Placemark[0].ExtendedData.LatLonBox; 

//bounds are the bounds of the box 
var bounds = new GLatLngBounds(new GLatLng(box.south, box.west), new GLatLng(box.north, box.east)); 

//center is the center of the box, you want this as the center of your screen 
var center = new GLatLng(box.Placemark[0].Point.coordinates[1], latlng.Placemark[0].Point.coordinates[0]); 

//zoom is the zoomlevel you need for all this 
var zoom = oMap.getBoundsZoomLevel(bounds); 

//the actual action 
map.setCenter(center, zoom); 
0

J'ai trouvé l'article suivant très utile. en utilisant le code d'échantillon de code que je peux capable d'atteindre enter link description here cela.

J'ai essayé le code dans drupal et ça marche.

0

Après avoir effectué la recherche, une fois que vous avez les emplacements, vous pouvez utiliser bounds.extend et map.fitBounds de sorte que la carte effectue automatiquement un zoom pour afficher toutes les broches retournés par votre recherche, comme celui-ci:

//places is an array that contains the search result 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0, place; place = places[i]; i++) { 
     //pass the location of each place to bounds.extend 
     bounds.extend(place.geometry.location); 
    } 
    //tell your map to sets the viewport to contain all the places. 
    map.fitBounds(bounds); 

Sur l'autre Si vous effectuez une recherche sur une zone comme un code postal, une ville ou un pays à l'aide du codeur géographique, vous pouvez également utiliser map.fitBounds pour définir la zone d'affichage entière de la zone retournée par le codeur géographique, comme ceci:

//response is the geocoder's response 
map.fitBounds(response[0].geometry.viewport); 

Voici un codepen avec l'exemple de géocodeur https://codepen.io/jaireina/pen/gLjEqY

Questions connexes