[OpenLayers-Users] Is it possible to completely change the projection of a Map?

Nick Whitelegg nick at hogweed.org
Mon May 7 07:01:47 EDT 2007


Hello everyone,

As part of an OpenStreetMap editing application I'm doing, I would like to be 
able to replace not only the layers but also the projection of the base map. 
The application is a point-of-interest editor for OpenStreetMap, it allows 
users to use the OpenLayers Vector layer to trace the outlines of lakes and 
woods and also add POIs like hill summits. I want users to be able to switch 
between two base layers.

The two base layers comprise Freemap (OpenStreetMap rendering client) which is 
projected in Mercator, and the New Popular Edition (old Ordnance Survey maps 
of the UK) which has the OSGB36 projection.

At the moment I use a combination of PHP (i.e. completely reload the page from 
the server) and openlayers JS code to deal with the switch. In other words, 
the Map object created depends on a query string value. Can I instead do it 
all within OpenLayers without necessitating a page reload?

My current code is as below (the variable "basemap" ultimately derives from a 
query string value, and "converter" is a class I've written to deal with 
conversion between projections).

Thanks,
Nick

            if (basemap=="npe")
            {
                cvtr = new converter("OSGB");

                /* NPE BEGIN  */
                map = new OpenLayers.Map('map',
                { maxExtent: new OpenLayers.Bounds (0,0,599999,999999),
                maxResolution : 8,
                units: 'meters' }
                );

                base = new OpenLayers.Layer.WMS( "New Popular Edition",
                "http://nick.dev.openstreetmap.org/openpaths/freemap.php",
                {'layers': 'npe'},{buffer:1} );
            }
            else
            {
                // main freemap maps
                cvtr = new converter("Mercator");

                map = new OpenLayers.Map('map',
                { maxExtent: new OpenLayers.Bounds
                    (-700000,6500000,200000,8100000),
                resolutions: [10],
                tileSize: new OpenLayers.Size(500,500),
                      units: 'meters' }
                        );

                base = new OpenLayers.Layer.WMS( "Freemap/Mapnik",
                        "http://www.free-map.org.uk/cgi-bin/render",
                            {buffer:1} );
            }
	   map.addLayer(base);



More information about the Users mailing list