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:
@@ -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&v=2&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>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -63,7 +63,7 @@ OpenLayers.Layer.SphericalMercator = {
|
|||||||
this.RESOLUTIONS[zoom] = maxResolution / Math.pow(2, zoom);
|
this.RESOLUTIONS[zoom] = maxResolution / Math.pow(2, zoom);
|
||||||
}
|
}
|
||||||
this.units = "m";
|
this.units = "m";
|
||||||
this.projection = "EPSG:900913";
|
this.projection = this.projection || "EPSG:900913";
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -320,6 +320,38 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user