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