85 lines
2.8 KiB
JavaScript
85 lines
2.8 KiB
JavaScript
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;
|
|
}
|