[OpenLayers-Users] SphericalMercator and SRS aliases epsg:900913, epsg:3857, epsg:3785, epsg:102113

Anne Blankert anne.blankert at geodan.nl
Mon Jul 19 06:14:51 EDT 2010


  Hello list,

OpenStreetMap and also some popular commercial mapservices (google, 
bing, yahoo) are using the so called sphericalmercator projection.
OpenLayers has built-in support for this type of layer, inherited from 
OpenLayers.Layer.SphericalMercator.

If you use a sphericalmercator layer as a baselayer, you may want to 
combine this with other layers. By default,  the openlayers 
sphericalmercator baselayer uses SRS projection-code 'EPSG:900913' . So, 
if you try to open an overlay, the overlay layer will be called with 
parameter SRS=EPSG:900913.

EPSG Code 900913 happens to be a bogus code, based on the word 'google'. 
Perhaps due to the resemblance of '900913' and 'google' or due to other 
reasons, there are now several other codes in use for the same projection:
EPSG:3857
EPSG:3785 <= maybe because of a typo by someone somewhere?
EPSG:102113

Some map-services have stopped supporting SRS=EPSG:900913 and this 
raises a problem for openlayers sphericalmercator users. Instead of 
displaying a map, these mapservices will respond with something like 'no 
support for EPSG:900913'.

The problem of overlaying sphericalmercator layers that do not support 
epsg:900913 can be (partly) solved as follows:
Override the default srs code for sphericalmercator layers by explicitly 
resetting the projection before adding the layer to a map:

var osmLayer = new OpenLayers.Layer.OSM("OpenStreetMap"); // osmlayer is 
now sphericalmercator with default epsg:900913
osmLayer.projection = new OpenLayers.Projection ("EPSG:3857"); // 
osmlayer is now sphericalmercator with epsg:3857
map.addLayers ([osmLayer]);

Overlay layers will now be requested with SRS=ESPG:3857

However, resetting the code for the baselayer projection, causes trouble 
for the controls for MousePosition and MeasureControl: distances and 
coordinates are no longer presented in the correct projection.

I solved this by adding the following lines of code to file 
lib\OpenLayers\Layer\SphericalMercator.js
OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:3857",
     OpenLayers.Layer.SphericalMercator.projectForward);
OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:102113",
     OpenLayers.Layer.SphericalMercator.projectForward);
OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:3785",
     OpenLayers.Layer.SphericalMercator.projectForward);

OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:4326",
     OpenLayers.Layer.SphericalMercator.projectInverse);
OpenLayers.Projection.addTransform("EPSG:102113", "EPSG:4326",
     OpenLayers.Layer.SphericalMercator.projectInverse);
OpenLayers.Projection.addTransform("EPSG:3785", "EPSG:4326",
     OpenLayers.Layer.SphericalMercator.projectInverse);

Questions:
- is this the way to support aliases for 900913 and support 
MousePosition and MeasureControl at the same time?
- if yes, shouldn't the above lines be part of the standard OpenLayers 
distribution?

Anne Blankert





More information about the Users mailing list