var epsg4326 = new OpenLayers.Projection("EPSG:4326");
var map;
var markers;
+var vectors;
var popup;
+var nonamekeys = {
+ 'openstreetmap.org': '2f59745a6b525b4ebdb100891d5b6711',
+ 'www.openstreetmap.org': 'fd093e52f0965d46bb1c6c6281022199',
+ 'openstreetmap.com': '4c60e7f5f31c576a9bb8da71c8d61152',
+ 'www.openstreetmap.com': '142f25a0770a51a9a400b3513834a199',
+ 'openstreetmap.net': '687c58fd1d715596bfc94abe653d8ac0',
+ 'www.openstreetmap.net': '0bd1654141c85d30b9c2ccdb5302f2e4'
+};
+
OpenLayers._getScriptLocation = function () {
+ // Should really have this file as an erb, so that this can return
+ // the real rails root
return "/openlayers/";
}
-function createMap(divName) {
+function createMap(divName, options) {
+ options = options || {};
+
map = new OpenLayers.Map(divName, {
- controls: [
+ controls: options.controls || [
new OpenLayers.Control.ArgParser(),
new OpenLayers.Control.Attribution(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.ScaleLine()
],
units: "m",
- maxResolution: 156543,
- numZoomLevels: 20
+ maxResolution: 156543.0339,
+ numZoomLevels: 20,
+ displayProjection: new OpenLayers.Projection("EPSG:4326")
});
var mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik", {
});
map.addLayer(cyclemap);
+ var nonamekey = nonamekeys[document.domain];
+ var noname = new OpenLayers.Layer.OSM("NoName", [
+ "http://a.tile.cloudmade.com/" + nonamekey + "/3/256/",
+ "http://b.tile.cloudmade.com/" + nonamekey + "/3/256/",
+ "http://c.tile.cloudmade.com/" + nonamekey + "/3/256/"
+ ], {
+ displayOutsideMaxExtent: true,
+ wrapDateLine: true,
+ numZoomLevels: 19
+ });
+ map.addLayer(noname);
+
var maplint = new OpenLayers.Layer.OSM.Maplint("Maplint", {
displayOutsideMaxExtent: true,
wrapDateLine: true
map.addLayer(maplint);
var numZoomLevels = Math.max(mapnik.numZoomLevels, osmarender.numZoomLevels);
+
markers = new OpenLayers.Layer.Markers("Markers", {
displayInLayerSwitcher: false,
numZoomLevels: numZoomLevels,
projection: "EPSG:900913"
});
map.addLayer(markers);
-
+
return map;
}
return marker;
}
+function addBoxToMap(boxbounds) {
+ if(!vectors) {
+ // Be aware that IE requires Vector layers be initialised on page load, and not under deferred script conditions
+ vectors = new OpenLayers.Layer.Vector("Box Layer", {
+ displayInLayerSwitcher: false
+ });
+ map.addLayer(vectors);
+ }
+ var geometry = boxbounds.toGeometry().transform(epsg4326, map.getProjectionObject());
+ var box = new OpenLayers.Feature.Vector(geometry, {}, {
+ strokeWidth: 2,
+ strokeColor: '#ee9900',
+ fillOpacity: 0
+ });
+
+ vectors.addFeatures(box);
+
+ return box;
+}
+
function openMapPopup(marker, description) {
closeMapPopup();
markers.removeMarker(marker);
}
+function removeBoxFromMap(box){
+ vectors.removeFeature(box);
+}
+
function getMapCenter(center, zoom) {
return map.getCenter().clone().transform(map.getProjectionObject(), epsg4326);
}
function setMapCenter(center, zoom) {
+ zoom = parseInt(zoom);
+ var numzoom = map.getNumZoomLevels();
+ if (zoom >= numzoom) zoom = numzoom - 1;
map.setCenter(center.clone().transform(epsg4326, map.getProjectionObject()), zoom);
}
map.zoomToExtent(extent.clone().transform(epsg4326, map.getProjectionObject()));
}
-function getMapExtent(extent) {
+function getMapExtent() {
return map.getExtent().clone().transform(map.getProjectionObject(), epsg4326);
}