Making it possible to use a custom SRS identifier for spherical mercator layers. r=bartvde (closes #2665)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@10384 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2010-06-08 21:37:33 +00:00
parent d0a2edbebd
commit 71482163cf
4 changed files with 124 additions and 1 deletions

View File

@@ -0,0 +1,46 @@
<!DOCTYPE HTML>
<html>
<head>
<title>OpenLayers: Web Mercator</title>
<link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="style.css" type="text/css" />
<script src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ'></script>
<script src="../lib/OpenLayers.js"></script>
<script src="web-mercator.js"></script>
</head>
<body onload="init()">
<h1 id="title">OpenLayers Spherical Mercator Example</h1>
<div id="tags">
</div>
<p id="shortdesc">
Shows the use of layers in spherical or web mercator using different
EPSG codes to indicate the same projection.
</p>
<div id="map" class="smallmap"></div>
<div id="docs">
<p>
A number of mapping services support the spherical or web
mercator but use different EPSG codes to identify it. ArcGIS
server version 9.3 uses EPSG:102113 to represent the same SRS
that OpenLayers typically refers to by EPSG:900913.
</p><p>
To configure a map with a WMS layer overlaid on a Google layer
where the WMS uses EPSG:102113 to refer to the web mercator
projection, the Google layer must be constructed with this
projection code in its options (it is not sufficient to
construct the map with this projection).
<p>
If your application needs to transform coordinates to and from
EPSG:102113, you must add custom transforms as well.
</p><p>
See the <a href="web-mercator.js" target="_blank">web-mercator.js</a>
source for details.
</p>
</div>
</body>
</html>

45
examples/web-mercator.js Normal file
View File

@@ -0,0 +1,45 @@
// make map available for easy debugging
var map;
// if your application transforms coordinates to and from EPSG:102113 then
// you must uncomment the lines below
// OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:102113",
// OpenLayers.Layer.SphericalMercator.projectForward);
// OpenLayers.Projection.addTransform("EPSG:102113", "EPSG:4326",
// OpenLayers.Layer.SphericalMercator.projectInverse);
function init() {
var options = {
projection: new OpenLayers.Projection("EPSG:102113"),
units: "m",
numZoomLevels: 18,
maxResolution: 156543.0339,
maxExtent: new OpenLayers.Bounds(-20037508, -20037508,
20037508, 20037508.34)
};
map = new OpenLayers.Map('map', options);
// create Google layer with EPSG:102113 code
var gsat = new OpenLayers.Layer.Google("Google Imagery", {
type: G_SATELLITE_MAP,
sphericalMercator: true,
projection: "EPSG:102113"
});
// create WMS layer
var wms = new OpenLayers.Layer.WMS(
"Highways",
"http://sampleserver1.arcgisonline.com/arcgis/services/Specialty/ESRI_StateCityHighway_USA/MapServer/WMSServer",
{layers: "2", format: "image/gif", transparent: "true"},
{
isBaseLayer: false,
wrapDateLine: true
}
);
map.addLayers([gsat, wms]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.setCenter(new OpenLayers.LonLat(-10723197, 4500612), 3);
}

View File

@@ -63,7 +63,7 @@ OpenLayers.Layer.SphericalMercator = {
this.RESOLUTIONS[zoom] = maxResolution / Math.pow(2, zoom);
}
this.units = "m";
this.projection = "EPSG:900913";
this.projection = this.projection || "EPSG:900913";
},
/**

View File

@@ -319,6 +319,38 @@
window.location.host);
}
}
function test_sphericalMercator(t) {
t.plan(4);
var map, layer;
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google();
map.addLayer(layer);
t.ok(!layer.sphericalMercator, "sphericalMercator false by default");
t.eq(map.getProjection(), "EPSG:4326", "4326 by default without sphericalMercator");
map.destroy();
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google(null, {
sphericalMercator: true
});
map.addLayer(layer);
t.eq(map.getProjection(), "EPSG:900913", "900913 by default with sphericalMercator");
map.destroy();
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google(null, {
sphericalMercator: true,
projection: "EPSG:102113"
});
map.addLayer(layer);
t.eq(map.getProjection(), "EPSG:102113", "custom code respected with sphericalMercator");
map.destroy();
}
</script>
</head>