Ticket #2934 (closed bug: invalid)

Opened 3 years ago

Last modified 3 years ago

Openlayers map breaks when a Markers layer is added before a GoogleV3 layer

Reported by: fbuchinger Owned by:
Priority: critical Milestone: 2.11 Release
Component: general Version: 2.10
Keywords: Cc:
State:

Description

I encountered some strange behaviour in my Openlayers app that dynamically adds map layers to an Openlayers Map based on some server side configuration.

The server sends a Json Array with layers and their config, which are then added sequentially to the map. The problem: if a markers layer is added before a GoogleV3 layer, the whole map breaks or shows a completely wrong extent (e.g. some part of Turkey instead of Western Germany).

I could reproduce this bug with the modified GoogleV3 example in FF 3.6:

function init() {
    map.destroy();
    map = new OpenLayers.Map('map', {allOverlays: true});
    map.addControl(new OpenLayers.Control.LayerSwitcher());
    
    // the SATELLITE layer has all 22 zoom level, so we add it first to
    // become the internal base layer that determines the zoom levels of the
    // map.
    var poi = new OpenLayers.Layer.Markers("Mymarker");
    var gsat = new OpenLayers.Layer.Google(
        "Google Satellite",
        {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}
    );
    var gphy = new OpenLayers.Layer.Google(
        "Google Physical",
        {type: google.maps.MapTypeId.TERRAIN, visibility: false}
    );
    var gmap = new OpenLayers.Layer.Google(
        "Google Streets", // the default
        {numZoomLevels: 20, visibility: false}
    );
    var ghyb = new OpenLayers.Layer.Google(
        "Google Hybrid",
        {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 22, visibility: false}
    );
    //This add sequence breaks the map
    map.addLayers([poi, gsat, gphy, gmap, ghyb]);
    //This changed add sequence causes no problems:
    // map.addLayers([gsat, gphy, gmap, ghyb, poi]);

    // Google.v3 uses EPSG:900913 as projection, so we have to
    // transform our coordinates
    map.setCenter(new OpenLayers.LonLat(10.2, 48.9).transform(
        new OpenLayers.Projection("EPSG:4326"),
        map.getProjectionObject()
    ), 5);
}

init();

Change History

Changed 3 years ago by fbuchinger

  • type changed from feature to bug

Changed 3 years ago by ahocevar

  • status changed from new to closed
  • resolution set to invalid

Not a bug. OpenLayers.Layer.Google.v3 configures the map automatically to use EPSG:900913 as projection. Your Markers layer, if the map is configured with {allOverlays: true}, will become the base layer and set the map projection to EPSG:4326, which is not supported by the Google layer. To make your application work, configure your map with the options shown  here.

Note: See TracTickets for help on using tickets.