~dongpo-deng/sahana-eden/test

« back to all changes in this revision

Viewing changes to static/scripts/gis/proj4js/demo/ProjPane.js

  • Committer: Deng Dongpo
  • Date: 2010-08-01 09:29:44 UTC
  • Revision ID: dongpo@dhcp-21193.iis.sinica.edu.tw-20100801092944-8t9obt4xtl7otesb
initial

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
var panes = {
 
2
  mapL: {},
 
3
  mapLL: {},
 
4
  mapR: {}
 
5
};
 
6
 
 
7
ProjPane = Class.create();
 
8
ProjPane.prototype = {
 
9
  id: null,
 
10
  map: null,
 
11
  proj: null,
 
12
 
 
13
  initialize: function(pane, code) {
 
14
    this.id = pane;
 
15
    if (code) this.setProj(code);
 
16
  },
 
17
 
 
18
  updateCoords: function(coords) {
 
19
    document.getElementById(this.id+'_coords').innerHTML = coords.toString();
 
20
    var pt = this.map.getLayerPxFromLonLat(coords);
 
21
    this.marker.moveTo(pt);
 
22
  },
 
23
 
 
24
  setProj: function(code) {
 
25
    document.getElementById(this.id+'_proj').value = code; 
 
26
 
 
27
    this.proj = new Proj4js.Proj(code);
 
28
    var mapDef = Proj4js.maps[this.proj.srsCode];
 
29
 
 
30
    if (this.map) this.map.destroy();
 
31
    this.map = new OpenLayers.Map(this.id, mapDef.mapOptions);
 
32
    this.mapLayer = new OpenLayers.Layer.WMS(mapDef.layerName, mapDef.layerUrl, mapDef.layerParams, mapDef.layerOptions);
 
33
    this.map.addLayer(this.mapLayer);
 
34
 
 
35
    this.map.addLayer(new OpenLayers.Layer.Markers(''));
 
36
    this.marker = new OpenLayers.Marker(new OpenLayers.LonLat(0,0));
 
37
    this.map.layers[1].addMarker(this.marker);
 
38
    this.marker.map = this.map;
 
39
    if (window.bounds) {
 
40
      this.map.addLayer(new OpenLayers.Layer.Boxes());
 
41
      this.map.layers[2].addMarker(new OpenLayers.Marker.Box(bounds));
 
42
      this.map.setCenter(bounds.getCenterLonLat());
 
43
    } else {    
 
44
      this.map.zoomToMaxExtent();
 
45
    }    
 
46
    this.map.events.register('click', this.map, this.mapClicked.bind(this));
 
47
 
 
48
    document.getElementById(this.id+'_units').innerHTML = this.proj.units; 
 
49
    document.getElementById(this.id+'_title').innerHTML = this.proj.title; 
 
50
    document.getElementById(this.id+'_class').innerHTML = this.proj.projName; 
 
51
  },
 
52
 
 
53
  mapClicked: function(ev) { 
 
54
    var olc = this.map.getLonLatFromViewPortPx(ev.xy);
 
55
    c = new Proj4js.Point(olc.lon, olc.lat);
 
56
    this.updateCoords(c);
 
57
  
 
58
    if (this.opposite && this.opposite.proj) {
 
59
      var newCoords = this.proj.transform(c, this.opposite.proj);
 
60
      this.opposite.updateCoords(newCoords);
 
61
    }
 
62
    if (this.common) {
 
63
      var newCoords = this.proj.inverse(c);
 
64
      this.common.updateCoords(newCoords);
 
65
    }
 
66
    if (this.projected1 && this.projected1.proj) {
 
67
      var newCoords = this.projected1.proj.forward(c);
 
68
      this.projected1.updateCoords(newCoords);
 
69
    }
 
70
    if (this.projected2 && this.projected2.proj) {
 
71
      var newCoords = this.projected2.proj.forward(c);
 
72
      this.projected2.updateCoords(newCoords);
 
73
    }
 
74
  }
 
75
};
 
76
 
 
77
 
 
78
function init() {
 
79
  panes['mapLL'] = new ProjPane('mapLL',Proj4js.defaultDatum);
 
80
  panes['mapL'] = new ProjPane('mapL');
 
81
  panes['mapR'] = new ProjPane('mapR');
 
82
 
 
83
  panes['mapLL'].projected1 = panes['mapL'];
 
84
  panes['mapLL'].projected2 = panes['mapR'];
 
85
  panes['mapL'].opposite = panes['mapR'];
 
86
  panes['mapR'].opposite = panes['mapL'];
 
87
  panes['mapL'].common = panes['mapLL'];
 
88
  panes['mapR'].common = panes['mapLL'];
 
89
 
 
90
};
 
91