summaryrefslogtreecommitdiff
path: root/misc/openlayers/examples/polar-projections.js
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/examples/polar-projections.js')
-rw-r--r--misc/openlayers/examples/polar-projections.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/misc/openlayers/examples/polar-projections.js b/misc/openlayers/examples/polar-projections.js
new file mode 100644
index 0000000..ac717fb
--- /dev/null
+++ b/misc/openlayers/examples/polar-projections.js
@@ -0,0 +1,84 @@
+var map, layer, overlay;
+
+var projectionOptions = {
+ 'EPSG:3574': {
+ projection: new OpenLayers.Projection('EPSG:3574'),
+ units: 'm',
+ maxExtent: new OpenLayers.Bounds(-5505054, -5505054, 5505054, 5505054),
+ maxResolution: 5505054 / 128,
+ numZoomLevels: 18
+ },
+ 'EPSG:3576': {
+ projection: new OpenLayers.Projection('EPSG:3576'),
+ units: 'm',
+ maxExtent: new OpenLayers.Bounds(-5505054, -5505054, 5505054, 5505054),
+ maxResolution: 5505054 / 128,
+ numZoomLevels: 18
+ },
+ 'EPSG:3571': {
+ projection: new OpenLayers.Projection('EPSG:3571'),
+ units: 'm',
+ maxExtent: new OpenLayers.Bounds(-5505054, -5505054, 5505054, 5505054),
+ maxResolution: 5505054 / 128,
+ numZoomLevels: 18
+ },
+ 'EPSG:3573': {
+ projection: new OpenLayers.Projection('EPSG:3573'),
+ units: 'm',
+ maxExtent: new OpenLayers.Bounds(-5505054, -5505054, 5505054, 5505054),
+ maxResolution: 5505054 / 128,
+ numZoomLevels: 18
+ }
+};
+
+function setProjection() {
+ projCode = this.innerHTML;
+ var oldExtent = map.getExtent();
+ var oldCenter = map.getCenter();
+ var oldProjection = map.getProjectionObject();
+
+ // map projection is controlled by the base layer
+ map.baseLayer.addOptions(projectionOptions[projCode]);
+
+ // with the base layer updated, the map has the new projection now
+ var newProjection = map.getProjectionObject();
+
+ // transform the center of the old projection, not the extent
+ map.setCenter(
+ oldCenter.transform(oldProjection, newProjection,
+ map.getZoomForExtent(oldExtent.transform(oldProjection, newProjection))
+ ));
+
+ for (var i=map.layers.length-1; i>=0; --i) {
+ // update grid settings
+ map.layers[i].addOptions(projectionOptions[projCode]);
+ // redraw layer - just in case center and zoom are the same in old and
+ // new projection
+ map.layers[i].redraw();
+ }
+}
+
+function init() {
+ map = new OpenLayers.Map('map');
+ layer = new OpenLayers.Layer.WMS(
+ 'world',
+ 'http://v2.suite.opengeo.org/geoserver/wms',
+ {layers: 'world', version: '1.1.1'},
+ projectionOptions['EPSG:3574']
+ );
+ overlay = new OpenLayers.Layer.WMS(
+ 'world',
+ 'http://v2.suite.opengeo.org/geoserver/wms',
+ {transparent: 'true', layers: 'world:borders', styles: 'line'},
+ projectionOptions['EPSG:3574']
+ );
+ overlay.isBaseLayer = false;
+ map.addLayers([layer, overlay]);
+ map.zoomToMaxExtent();
+
+ // add behaviour to dom elements
+ document.getElementById('epsg3574').onclick = setProjection;
+ document.getElementById('epsg3576').onclick = setProjection;
+ document.getElementById('epsg3571').onclick = setProjection;
+ document.getElementById('epsg3573').onclick = setProjection;
+}