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