[OpenLayers-Users] Google Maps map does not reflect zoom level change

Axel Müller axel.mueller at avanux.de
Sat Jul 11 00:15:16 EDT 2009


Hi,

Just in case somebody is having the same problem. Center/zoom works well 
for all layers using the code below:

    function init() {
        map = new OpenLayers.Map('map', {
            projection: new OpenLayers.Projection("EPSG:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
            units: "m",
            numZoomLevels: 20,
            controls: [
                new OpenLayers.Control.Navigation(),
                new OpenLayers.Control.PanZoomBar(),
                new OpenLayers.Control.LayerSwitcher(),
                new OpenLayers.Control.Permalink(),
                new OpenLayers.Control.ScaleLine(),
            ]
        });

        var osmLayer = new OpenLayers.Layer.OSM.Mapnik("OpenStreetMap");
        var gMapLayer = new OpenLayers.Layer.Google("Google", {sphericalMercator:true});
        var gPhysicalLayer = new OpenLayers.Layer.Google("Google Physical", {type: G_PHYSICAL_MAP, sphericalMercator:true});
        var gSatelliteLayer = new OpenLayers.Layer.Google("Google Satellite", {type: G_SATELLITE_MAP, sphericalMercator:true});
        map.addLayers([osmLayer, gMapLayer, gPhysicalLayer, gSatelliteLayer]);

        map.zoomTo(zoom);
    }

    function triggerUpdate() {
        triggerUpdateActive = true;
        window.setTimeout("update()", refreshSeconds * 1000);
    }

    function update() {
        triggerUpdate();
        if(rss != null) {
            rss.destroy();
        }
        rss = new OpenLayers.Layer.GeoRSS(trackingID, geoRssUrl, {'projection': new OpenLayers.Projection("EPSG:4326")} );
        rss.events.register("loadend", window, populateMap);
        map.addLayer(rss);
    }

    function populateMap() {
        map.zoomTo(zoom);

        if(rss.markers.length >= 1) {
            var lastMarker=rss.markers[rss.markers.length-1];
            map.setCenter(lastMarker.lonlat);
       }
       map.raiseLayer(rss, 1);
    }


Regards,

Axel


> Andrea,
>
> Andreas Hocevar wrote:
>>> Based on some parameters I change the zoom level using
>>> map.setCenter(lonlat, zoom).
>>> This works perfectly for OSM Mapnik layer but not for Google layer where
>>> the pan zoom bar reflects the new zoom level but the map itself still
>>> shows the previous zoom level. Am I missing something?
>>>
>>> osmLayer = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
>>> gMapLayer = new OpenLayers.Layer.Google("Google Maps", {numZoomLevels:
>>> 20, isBaseLayer: true });
>>>     
>>
>> Using Google layers like this only works in a few use cases. You have
>> to use Spherical Mercator to make it behave like you are expecting.
>> See http://docs.openlayers.org/library/spherical_mercator.html for
>> explanation, tutorial and howto.
>>   
> Thanks for pointing me to this documentation. I'm using Spherical 
> Mercator now but the underlying problem is still the same:
> While being on the Google layer, a call to 
> map.setCenter(lastMarker.lonlat, zoom) causes the zoom bar to show the 
> new zoom level but the map is still displayed for the previously 
> selected zoom level.  If I switch to OSM layer and back to Google 
> layer, the map in the Google layer is shown with the correct zoom 
> level, matching the zoom level indicated by the zoom bar.
>
> Best regards,
>
> Axel
>
>
> Below is the relevant part of JS:
>
>
>     function init() {
>         map = new OpenLayers.Map('map', {
>             projection: new OpenLayers.Projection("EPSG:900913"),
>             displayProjection: new OpenLayers.Projection("EPSG:4326"),
>             units: "m",           
>             controls: [
>                 new OpenLayers.Control.Navigation(),
>                 new OpenLayers.Control.PanZoomBar(),
>                 new OpenLayers.Control.LayerSwitcher({'ascending':false}),
>                 new OpenLayers.Control.Permalink(),
>                 new OpenLayers.Control.ScaleLine(),
>                 new OpenLayers.Control.Permalink('permalink'),
>                 new OpenLayers.Control.MousePosition(),
>                 new OpenLayers.Control.OverviewMap(),
>             ]
>         });
>
>         var gMapLayer = new OpenLayers.Layer.Google("Google Maps", 
> {isBaseLayer: true, 'sphericalMercator': true });
>         var osmLayer = new OpenLayers.Layer.OSM();
>         map.addLayers([gMapLayer, osmLayer]);
>         map.zoomTo(zoom);
>     }
>
>     function triggerUpdate() {
>         triggerUpdateActive = true;
>         window.setTimeout("update()", refreshSeconds * 1000);
>     }
>
>     function update() {
>         triggerUpdate();
>         if(rss != null) {
>             rss.destroy();
>         }
>         rss = new OpenLayers.Layer.GeoRSS(trackingID, geoRssUrl, 
> {'projection': new OpenLayers.Projection("EPSG:4326")} );
>         rss.events.register("loadend", window, populateMap);
>         map.addLayer(rss);
>     }
>
>     function populateMap() {
>         if(rss.markers.length >= 1) {
>             var lastMarker=rss.markers[rss.markers.length-1];
>             map.setCenter(lastMarker.lonlat, zoom);
>        }
>        map.raiseLayer(rss, 1);
>     }
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20090711/74a33e8d/attachment.html


More information about the Users mailing list