]> git.openstreetmap.org Git - rails.git/blob - public/javascripts/map.js
Remove spurious comma that was breaking Safari.
[rails.git] / public / javascripts / map.js
1 var epsg4326 = new OpenLayers.Projection("EPSG:4326");
2 var map;
3 var markers;
4 var popup;
5
6 OpenLayers._getScriptLocation = function () {
7    return "/openlayers/";
8 }
9
10 function createMap(divName) {
11    map = new OpenLayers.Map(divName, {
12       controls: [
13          new OpenLayers.Control.ArgParser(),
14          new OpenLayers.Control.Attribution(),
15          new OpenLayers.Control.LayerSwitcher(),
16          new OpenLayers.Control.Navigation(),
17          new OpenLayers.Control.PanZoomBar(),
18          new OpenLayers.Control.ScaleLine()
19       ],
20       maxResolution: 156543,
21       units: "m"
22    });
23
24    var mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik", {
25       displayOutsideMaxExtent: true,
26       wrapDateLine: true
27    });
28    map.addLayer(mapnik);
29
30    var osmarender = new OpenLayers.Layer.OSM.Osmarender("Osmarender", {
31       displayOutsideMaxExtent: true,
32       wrapDateLine: true
33    });
34    map.addLayer(osmarender);
35
36    var maplint = new OpenLayers.Layer.OSM.Maplint("Maplint", {
37       displayOutsideMaxExtent: true,
38       wrapDateLine: true
39    });
40    map.addLayer(maplint);
41
42    var numZoomLevels = Math.max(mapnik.numZoomLevels, osmarender.numZoomLevels);
43    markers = new OpenLayers.Layer.Markers("Markers", {
44       displayInLayerSwitcher: false,
45       numZoomLevels: numZoomLevels,
46       maxExtent: new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508),
47       maxResolution: 156543,
48       units: "m",
49       projection: "EPSG:900913"
50    });
51    map.addLayer(markers);
52
53    return map;
54 }
55
56 function getArrowIcon() {
57    var size = new OpenLayers.Size(25, 22);
58    var offset = new OpenLayers.Pixel(-30, -27);
59    var icon = new OpenLayers.Icon("/images/arrow.png", size, offset);
60
61    return icon;
62 }
63
64 function addMarkerToMap(position, icon, description) {
65    var marker = new OpenLayers.Marker(position.clone().transform(epsg4326, map.getProjectionObject()), icon);
66
67    markers.addMarker(marker);
68
69    if (description) {
70       marker.events.register("click", marker, function() { openMapPopup(marker, description) });
71    }
72
73    return marker;
74 }
75
76 function openMapPopup(marker, description) {
77    closeMapPopup();
78
79    popup = new OpenLayers.Popup.AnchoredBubble("popup", marker.lonlat, null,
80                                                description, marker.icon, true);
81    popup.setBackgroundColor("#E3FFC5");
82    popup.autoSize = true;
83    map.addPopup(popup);
84
85    return popup;
86 }
87
88 function closeMapPopup() {
89    if (popup) {
90       map.removePopup(popup);
91       delete popup;
92    }
93 }
94
95 function removeMarkerFromMap(marker){
96    markers.removeMarker(marker);
97 }
98
99 function getMapCenter(center, zoom) {
100    return map.getCenter().clone().transform(map.getProjectionObject(), epsg4326);
101 }
102
103 function setMapCenter(center, zoom) {
104    map.setCenter(center.clone().transform(epsg4326, map.getProjectionObject()), zoom);
105 }
106
107 function setMapExtent(extent) {
108    map.zoomToExtent(extent.clone().transform(epsg4326, map.getProjectionObject()));
109 }
110
111 function getEventPosition(event) {
112    return map.getLonLatFromViewPortPx(e.xy).clone().transform(epsg4326, map.getProjectionObject());
113 }
114
115 function getMapLayers() {
116    var layers = "";
117
118    for (var i=0; i< this.map.layers.length; i++) {
119       var layer = this.map.layers[i];
120
121       if (layer.isBaseLayer) {
122          layers += (layer == this.map.baseLayer) ? "B" : "0";
123       } else {
124          layers += (layer.getVisibility()) ? "T" : "F";
125       }
126    }
127
128    return layers;
129 }
130
131 function setMapLayers(layers) {
132    for (var i=0; i < layers.length; i++) {
133       var layer = map.layers[i];
134
135       if (layer) {
136          var c = layers.charAt(i);
137
138          if (c == "B") {
139             map.setBaseLayer(layer);
140          } else if ( (c == "T") || (c == "F") ) {
141             layer.setVisibility(c == "T");
142          }
143       }
144    }
145 }
146
147 function scaleToZoom(scale) {
148    return Math.log(360.0/(scale * 512.0)) / Math.log(2.0);
149 }