]> git.openstreetmap.org Git - rails.git/blob - public/javascripts/map.js
Ajaxify the export tab.
[rails.git] / public / javascripts / map.js
1 var map;
2 var markers;
3 var popup;
4
5 OpenLayers._getScriptLocation = function () {
6    return "/openlayers/";
7 }
8    
9 function createMap(divName) {
10    map = new OpenLayers.Map(divName, {
11       maxExtent: new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508),
12       maxResolution: 156543,
13       units: "m",
14       projection: "EPSG:900913",
15       controls: [
16          new OpenLayers.Control.ArgParser(), 
17          new OpenLayers.Control.Attribution(),
18          new OpenLayers.Control.LayerSwitcher(),
19          new OpenLayers.Control.Navigation(), 
20          new OpenLayers.Control.PanZoomBar()
21       ]
22    });
23
24    var mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik", { displayOutsideMaxExtent: true });
25    map.addLayer(mapnik);
26
27    var osmarender = new OpenLayers.Layer.OSM.Osmarender("Osmarender", { displayOutsideMaxExtent: true });
28    map.addLayer(osmarender);
29
30    var maplint = new OpenLayers.Layer.OSM.Maplint("Maplint", { displayOutsideMaxExtent: true });
31    map.addLayer(maplint);
32
33    var numZoomLevels = Math.max(mapnik.numZoomLevels, osmarender.numZoomLevels);
34    markers = new OpenLayers.Layer.Markers("Markers", { 
35       displayInLayerSwitcher: false,
36       numZoomLevels: numZoomLevels
37    });
38    map.addLayer(markers);
39
40    return map;
41 }
42
43 function getArrowIcon() {
44    var size = new OpenLayers.Size(25, 22);
45    var offset = new OpenLayers.Pixel(-30, -27);
46    var icon = new OpenLayers.Icon("/images/arrow.png", size, offset);
47
48    return icon;
49 }
50
51 function addMarkerToMap(position, icon, description) {
52    var marker = new OpenLayers.Marker(position, icon);
53
54    markers.addMarker(marker);
55
56    if (description) {
57       marker.events.register("click", marker, function() { openMapPopup(marker, description) });
58    }
59
60    return marker;
61 }
62
63 function openMapPopup(marker, description) {
64    closeMapPopup();
65
66    popup = new OpenLayers.Popup.AnchoredBubble("popup", marker.lonlat,
67                                                sizeMapPopup(description),
68                                                "<p style='padding-right: 28px'>" + description + "</p>",
69                                                marker.icon, true);
70    popup.setBackgroundColor("#E3FFC5");
71    map.addPopup(popup);
72
73    return popup;
74 }
75
76 function closeMapPopup() {
77    if (popup) {
78       map.removePopup(popup);
79       delete popup;
80    }
81 }
82
83 function sizeMapPopup(text) {
84    var box = document.createElement("div");
85
86    box.innerHTML = text;
87    box.style.visibility = "hidden";
88    box.style.position = "absolute";
89    box.style.top = "0px";
90    box.style.left = "0px";
91    box.style.width = "200px";
92    box.style.height = "auto";
93
94    document.body.appendChild(box);
95
96    var width = box.offsetWidth;
97    var height = box.offsetHeight;
98
99    document.body.removeChild(box);
100
101    return new OpenLayers.Size(width + 30, height + 24);
102 }
103
104 function removeMarkerFromMap(marker){
105    markers.removeMarker(marker);
106 }
107
108 function getMapLayers() {
109    var layers = "";
110
111    for (var i=0; i< this.map.layers.length; i++) {
112       var layer = this.map.layers[i];
113
114       if (layer.isBaseLayer) {
115          layers += (layer == this.map.baseLayer) ? "B" : "0";
116       } else {
117          layers += (layer.getVisibility()) ? "T" : "F";
118       }
119    }
120
121    return layers;
122 }
123
124 function setMapLayers(layers) {
125    for (var i=0; i < layers.length; i++) {
126       var layer = map.layers[i];
127
128       if (layer) {
129          var c = layers.charAt(i);
130
131          if (c == "B") {
132             map.setBaseLayer(layer);
133          } else if ( (c == "T") || (c == "F") ) {
134             layer.setVisibility(c == "T");
135          }
136       }
137    }
138 }
139
140 function mercatorToLonLat(merc) {
141    var lon = (merc.lon / 20037508.34) * 180;
142    var lat = (merc.lat / 20037508.34) * 180;
143
144    lat = 180/Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);
145
146    return new OpenLayers.LonLat(lon, lat);
147 }
148
149 function lonLatToMercator(ll) {
150    var lon = ll.lon * 20037508.34 / 180;
151    var lat = Math.log(Math.tan((90 + ll.lat) * Math.PI / 360)) / (Math.PI / 180);
152
153    lat = lat * 20037508.34 / 180;
154
155    return new OpenLayers.LonLat(lon, lat);
156 }
157
158 function scaleToZoom(scale) {
159    return Math.log(360.0/(scale * 512.0)) / Math.log(2.0);
160 }