[OpenLayers-Users] OpenLayers with 900913 projection and drupal OpenLayers module

Alexander Kocisky alexander.kocisky at gmail.com
Thu Jan 10 12:05:49 PST 2013


Hi Stephen,

thanks for your quick reply, im actually using Drupal Openlayer module but
i've got the options with which the map is created, the code:

...

// Initialize openlayers map
            var openlayers = new OpenLayers.Map(map.id, options);
            alert("The map: "+map.id+" options are:
"+JSON.stringify(options, null, 4));

            // Run the layer addition first
            Drupal.openlayers.addLayers(map, openlayers);

            // Attach data to map DOM object
            $(this).data('openlayers', {'map': map, 'openlayers':
openlayers});

            // Finally, attach behaviors
            Drupal.attachBehaviors(this);

...

The output:

The map: openlayers-map-a47c4de7 options are: {
    "projection": {
        "projCode": "EPSG:900913"
    },
    "displayProjection": {
        "projCode": "EPSG:4326"
    },
    "maxExtent": {
        "left": -20037508.34,
        "bottom": -20037508.34,
        "right": 20037508.34,
        "top": 20037508.34
    },
    "units": "m",
    "maxResolution": "auto",
    "controls": [],
    "theme": "/sites/all/modules/openlayers/themes/default_dark/style.css"
}

Here is how drupal adds the layers:

'addLayers': function(map, openlayers) {

    var sorted = [];
    for (var name in map.layers) {
      sorted.push({'name': name, 'weight': map.layers[name].weight,
'baselayer': map.layers[name].baselayer });
    }

    sorted.sort(function(a, b) {
      var x = parseInt(a.weight, 10), y = parseInt(b.weight, 10);
      return ((a.baselayer && x < y) ? -1 : ((b.baselayer || x > y) ? 1 :
0));
    });

    for (var i = 0; i < sorted.length; ++i) {
      var layer,
        name = sorted[i].name,
        options = map.layers[name];

      // Add reference to our layer ID
      options.drupalID = name;
      // Ensure that the layer handler is available
      if (options.layer_handler !== undefined &&
        Drupal.openlayers.layer[options.layer_handler] !== undefined) {
        var layer =
Drupal.openlayers.layer[options.layer_handler](map.layers[name].title, map,
options);

        layer.visibility = !!(!map.layer_activated ||
map.layer_activated[name]);

        if (layer.isBaseLayer === false) {
          layer.displayInLayerSwitcher = (!map.layer_switcher ||
map.layer_switcher[name]);
        }

        if (map.center.wrapdateline === '1') {
          // TODO: move into layer specific settings
          layer.wrapDateLine = true;
        }

        alert("The layer is "+JSON.stringify(map.layers, null, 4));
        openlayers.addLayer(layer);
      }
    }

and here is the result of the layer options:

The layer is {
    "my_wms_layer": {
        "base_url": "
http://gis.site.org:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=MyMap:my_layer
",
        "params": {
            "isBaseLayer": 0,
            "buffer": 2,
            "ratio": 1.5,
            "singleTile": 0,
            "resolutions": [
                156543.0339,
                78271.51695,
                39135.758475,
                19567.8792375,
                9783.93961875,
                4891.969809375,
                2445.9849046875,
                1222.9924523438,
                611.49622617188,
                305.74811308594,
                152.87405654297,
                76.437028271484,
                38.218514135742,
                19.109257067871,
                9.5546285339355,
                4.7773142669678,
                2.3886571334839,
                1.1943285667419,
                0.59716428337097
            ],
            "projection": {
                "projCode": "EPSG:900913"
            },
            "maxextent": [
                -20037508,
                -20037508,
                20037508,
                20037508
            ],
            "drupalID": "my_wms_layer",
            "units": "m",
            "maxExtent": {
                "left": -20037508.34,
                "bottom": -20037508.34,
                "right": 20037508.34,
                "top": 20037508.34
            }
        },
        "options": {
            ...rname": "world-bright",
        "layer_type": "openlayers_layer_type_mapbox",
        "osm": false,
        "baselayer": true,
        "type": "png",
        "resolutions": [
            156543.0339,
            78271.51695,
            39135.758475,
            19567.8792375,
            9783.93961875,
            4891.969809375,
            2445.9849046875,
            1222.9924523438,
            611.49622617188,
            305.74811308594,
            152.87405654297,
            76.437028271484
        ],
        "projection": {
            "projCode": "EPSG:900913"
        },
        "serverResolutions": [
            156543.0339,
            78271.51695,
            39135.758475,
            19567.8792375,
            9783.93961875,
            4891.969809375,
            2445.9849046875,
            1222.9924523438,
            611.49622617188,
            305.74811308594,
            152.87405654297,
            76.437028271484,
            38.218514135742,
            19.109257067871,
            9.5546285339355,
            4.7773142669678,
            2.3886571334839,
            1.1943285667419,
            0.59716428337097
        ],
        "maxExtent": {
            "left": -20037508,
            "bottom": -20037508,
            "right": 20037508,
            "top": 20037508
        },
        "layer_handler": "MapBox",
        "title": "MapBox World Bright",
        "weight": 0,
        "drupalID": "mapbox_world_bright",
        "isBaseLayer": true
    }
}

so it seems that "SphericalMercator: true" is missing in both the map and
the layer (my_wms_layer), would you say this is the reason of why the WMS
bound box parameter is incorrect when open layer fetches the different png
images of the map?

Thanks !!
Alex


On 9 January 2013 18:14, Gery . <gamejihou at hotmail.com> wrote:

>
> > "Peru WMS",
>
> cool =)
>
> __________________________________________________________________________________________
> Piensa en el medio ambiente - mantenlo en la pantalla. NO lo imprimas si
> NO es necesario.
> Think green - keep it on the screen. Do NOT print if it is NOT necessary.
> Denken Sie an die Umwelt - bewahren Sie es auf dem Bildschirm. Drucken
> Sie NICHT, wenn es NICHT notwendig ist.
>
>
> > Date: Wed, 9 Jan 2013 17:57:53 -0500
> > From: woodbri at swoodbridge.com
> > To: openlayers-users at lists.osgeo.org
> > Subject: Re: [OpenLayers-Users] OpenLayers with 900913 projection and
> drupal OpenLayers module
>
> >
> > On 1/9/2013 5:49 PM, Alexander Kocisky wrote:
> > > Hi all,
> > >
> > > I've set up a Geoserver/PostGIS infrastructure in order to render a
> > > database of GIS information. Initially i was working with the
> projection
> > > 4326 but when i've installed Drupal + OpenLayers i've realized that
> > > there are almost no tiles with this projection, the way to go seems the
> > > projection 900913.
> > >
> > > So i've converted all my gis objects to 900913, verified that i could
> > > see the rendered points in the geoserver Layer Preview with OpenLayer
> > > and tried to add the WMS layer to my map created with Drupal Openlayer
> > > module.
> > >
> > > It apparently works but it fetches a bound box that is wrong, in fact
> if
> > > i modify manually the request urls (from the browser) i get the correct
> > > data. I need to understand better how this bounded box works, how is it
> > > initially set? i guess that for each png image downloaded there is a
> > > specific BBOX parameter, is this done by the Openlayers library?
> > >
> > > I've also explained the issue on the drupal openlayers module but
> > > apparently it was never really tested with WMS 900931 (weird right?) .
> > > The module works well with the same configuration and the 4326
> > > projection (http://drupal.org/node/1884422).
> > >
> > > Please let me know if you have any suggestion.
> > > Thanks!!
> > >
> > > Alex
> >
> > Alex,
> >
> > I think you need to post how the OL map and layer objects are defined or
> > post a link to your site if it is public.
> >
> > More than likely you have left off something like: SphericalMercator:
> true
> >
> >
> > Here is what I use:
> >
> > map = new OpenLayers.Map('map', {
> > maxResolution: 156543.0339/2,
> > numZoomLevels: 18,
> > units: 'm',
> > maxExtent: new OpenLayers.Bounds(-20037508.34,
> > -20037508.34, 20037508.34, 20037508.34),
> > sphericalMercator: true,
> > projection: epsg900913,
> > displayProjection: epsg4326,
> > controls:[
> > new OpenLayers.Control.LayerSwitcher(),
> > // new OpenLayers.Control.OverviewMap(),
> > new OpenLayers.Control.Permalink('permalink'),
> > new OpenLayers.Control.MouseToolbar(),
> > new OpenLayers.Control.MousePosition(),
> > new OpenLayers.Control.PanZoomBar(),
> > new OpenLayers.Control.Scale(),
> > new OpenLayers.Control.ScaleLine()
> > ]
> > });
> >
> > var wms = new OpenLayers.Layer.WMS(
> > "Peru WMS",
> > "http://server/cgi-bin/mapserv?",
> > { map: "/u/data/mydata/peru4.map",
> > format: "image/png",
> > layers: "Peru4_4326_WMS"
> > },
> > {
> > sphericalMercator: true,
> > transitionEffect: 'resize',
> > singleTile: true,
> > ratio: 1.0
> > });
> > wms.addOptions({isBaseLayer: true});
> > wms.setVisibility(false);
> > map.addLayer(wms);
> >
> > -Steve
> > _______________________________________________
> > Users mailing list
> > Users at lists.osgeo.org
> > http://lists.osgeo.org/mailman/listinfo/openlayers-users
>
> _______________________________________________
> Users mailing list
> Users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/openlayers-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/openlayers-users/attachments/20130110/1c07f508/attachment.html>


More information about the Users mailing list