92 lines
2.9 KiB
JavaScript
92 lines
2.9 KiB
JavaScript
var panes = {
|
|
mapL: {},
|
|
mapLL: {},
|
|
mapR: {}
|
|
};
|
|
|
|
ProjPane = Class.create();
|
|
ProjPane.prototype = {
|
|
id: null,
|
|
map: null,
|
|
proj: null,
|
|
|
|
initialize: function(pane, code) {
|
|
this.id = pane;
|
|
if (code) this.setProj(code);
|
|
},
|
|
|
|
updateCoords: function(coords) {
|
|
document.getElementById(this.id+'_coords').innerHTML = coords.toString();
|
|
var pt = this.map.getLayerPxFromLonLat(coords);
|
|
this.marker.moveTo(pt);
|
|
},
|
|
|
|
setProj: function(code) {
|
|
document.getElementById(this.id+'_proj').value = code;
|
|
|
|
this.proj = new Proj4js.Proj(code);
|
|
var mapDef = Proj4js.maps[this.proj.srsCode];
|
|
|
|
if (this.map) this.map.destroy();
|
|
this.map = new OpenLayers.Map(this.id, mapDef.mapOptions);
|
|
this.mapLayer = new OpenLayers.Layer.WMS(mapDef.layerName, mapDef.layerUrl, mapDef.layerParams, mapDef.layerOptions);
|
|
this.map.addLayer(this.mapLayer);
|
|
|
|
this.map.addLayer(new OpenLayers.Layer.Markers(''));
|
|
this.marker = new OpenLayers.Marker(new OpenLayers.LonLat(0,0));
|
|
this.map.layers[1].addMarker(this.marker);
|
|
this.marker.map = this.map;
|
|
if (window.bounds) {
|
|
this.map.addLayer(new OpenLayers.Layer.Boxes());
|
|
this.map.layers[2].addMarker(new OpenLayers.Marker.Box(bounds));
|
|
this.map.setCenter(bounds.getCenterLonLat());
|
|
} else {
|
|
this.map.zoomToMaxExtent();
|
|
}
|
|
this.map.events.register('click', this.map, this.mapClicked.bind(this));
|
|
|
|
document.getElementById(this.id+'_units').innerHTML = this.proj.units;
|
|
document.getElementById(this.id+'_title').innerHTML = this.proj.title;
|
|
document.getElementById(this.id+'_class').innerHTML = this.proj.projName;
|
|
},
|
|
|
|
mapClicked: function(ev) {
|
|
var olc = this.map.getLonLatFromViewPortPx(ev.xy);
|
|
c = new Proj4js.Point(olc.lon, olc.lat);
|
|
this.updateCoords(c);
|
|
|
|
if (this.opposite && this.opposite.proj) {
|
|
var newCoords = this.proj.transform(c, this.opposite.proj);
|
|
this.opposite.updateCoords(newCoords);
|
|
}
|
|
if (this.common) {
|
|
var newCoords = this.proj.inverse(c);
|
|
this.common.updateCoords(newCoords);
|
|
}
|
|
if (this.projected1 && this.projected1.proj) {
|
|
var newCoords = this.projected1.proj.forward(c);
|
|
this.projected1.updateCoords(newCoords);
|
|
}
|
|
if (this.projected2 && this.projected2.proj) {
|
|
var newCoords = this.projected2.proj.forward(c);
|
|
this.projected2.updateCoords(newCoords);
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
function init() {
|
|
panes['mapLL'] = new ProjPane('mapLL',Proj4js.defaultDatum);
|
|
panes['mapL'] = new ProjPane('mapL');
|
|
panes['mapR'] = new ProjPane('mapR');
|
|
|
|
panes['mapLL'].projected1 = panes['mapL'];
|
|
panes['mapLL'].projected2 = panes['mapR'];
|
|
panes['mapL'].opposite = panes['mapR'];
|
|
panes['mapR'].opposite = panes['mapL'];
|
|
panes['mapL'].common = panes['mapLL'];
|
|
panes['mapR'].common = panes['mapLL'];
|
|
|
|
};
|
|
|