Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps v3: Enforcing min. zoom level when using fitBounds

I'm drawing a series of markers on a map (using v3 of the maps api).

In v2, I had the following code:

  bounds = new GLatLngBounds();    ... loop thru and put markers on map ...   bounds.extend(point);   ... end looping    map.setCenter(bounds.getCenter());   var level = map.getBoundsZoomLevel(bounds);   if ( level == 1 )      level = 5;   map.setZoom(level > 6 ? 6 : level); 

And that work fine to ensure that there was always an appropriate level of detail displayed on the map.

I'm trying to duplicate this functionality in v3, but the setZoom and fitBounds don't seem to be cooperating:

... loop thru and put markers on the map   var ll = new google.maps.LatLng(p.lat,p.lng);   bounds.extend(ll); ... end loop  var zoom = map.getZoom(); map.setZoom(zoom > 6 ? 6 : zoom); map.fitBounds(bounds); 

I've tried different permutation (moving the fitBounds before the setZoom, for example) but nothing I do with setZoom seems to affect the map. Am I missing something? Is there a way to do this?

like image 909
chris Avatar asked Jun 07 '10 13:06

chris


People also ask

How do I change the default zoom on Google Maps?

You can change the zoom level of the map using simple steps. Step 1 Go to Add or Edit Map page . Step 2 Select 'Default zoom level' in the 'Map Information section'. Step 3 click save map and see the changes.

How do I fix Google Maps zoom?

To fix Google maps zooming problems, for Google maps default zoom you want to know how to change the zoom level on Google Maps. You can change the zoom level by going to the Edit map page and then selecting 'default zoom level' in the map information section and then clicking save map.

What is the minimum zoom level in Google map?

Furthermore, the maximum value of Google Maps Zoom level is 22. Therefore, the defined maximum value must be below or equal to 22, which is the default. The minimum value of Zoom Level is 0 by default, it can be changed by the shortcode as well.

Why does Google Maps keep zooming in?

The app does this because you're not in navigation mode, you're browsing the route. It zooms out to fit the entire route on your screen when you reorient the device. If you don't want it to zoom, press the navigation button in the lower right corner and optionally switch off voice navigation.


2 Answers

At this discussion on Google Groups I discovered that basically when you do a fitBounds, the zoom happens asynchronously so you need to capture the zoom and bounds change event. The code in the final post worked for me with a small modification... as it stands it stops you zooming greater than 15 completely, so used the idea from the fourth post to have a flag set to only do it the first time.

// Do other stuff to set up map var map = new google.maps.Map(mapElement, myOptions); // This is needed to set the zoom after fitbounds,  google.maps.event.addListener(map, 'zoom_changed', function() {     zoomChangeBoundsListener =          google.maps.event.addListener(map, 'bounds_changed', function(event) {             if (this.getZoom() > 15 && this.initialZoom == true) {                 // Change max/min zoom here                 this.setZoom(15);                 this.initialZoom = false;             }         google.maps.event.removeListener(zoomChangeBoundsListener);     }); }); map.initialZoom = true; map.fitBounds(bounds); 

Hope that helps,

Anthony.

like image 119
3 revs, 3 users 93% Avatar answered Sep 28 '22 07:09

3 revs, 3 users 93%


Without trying it, I'd say you should be able to do it just by having fitBounds() before you get the zoom level, i.e.

map.fitBounds(bounds); var zoom = map.getZoom(); map.setZoom(zoom > 6 ? 6 : zoom); 

If you did try that and it didn't work, you can setup your map with minZoom in the MapOptions (api-reference) like this:

var map = new google.maps.Map(document.getElementById("map"), { minZoom: 6 }); 

This would keep the map from zooming any further out when using fitBounds().

like image 24
Flygenring Avatar answered Sep 28 '22 09:09

Flygenring