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