diff options
Diffstat (limited to 'web/js/map-OpenStreetMap.js')
-rw-r--r-- | web/js/map-OpenStreetMap.js | 76 |
1 files changed, 69 insertions, 7 deletions
diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 04237e075..c5aa318b0 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -1,5 +1,5 @@ YAHOO.util.Event.onContentReady('map', function() { - var map = new OpenLayers.Map("map", { + fixmystreet.map = new OpenLayers.Map("map", { controls: [ new OpenLayers.Control.ArgParser(), //new OpenLayers.Control.LayerSwitcher(), @@ -8,20 +8,82 @@ YAHOO.util.Event.onContentReady('map', function() { ], displayProjection: new OpenLayers.Projection("EPSG:4326") }); - var streetview = new fixmystreet.map_type("", { + var osm = new fixmystreet.map_type("", { zoomOffset: 14, numZoomLevels: 4 }); - map.addLayer(streetview); + fixmystreet.map.addLayer(osm); - var centre = new OpenLayers.LonLat( fixmystreet.easting, fixmystreet.northing ); + var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); centre.transform( - new OpenLayers.Projection("EPSG:27700"), - map.getProjectionObject() + new OpenLayers.Projection("EPSG:4326"), + fixmystreet.map.getProjectionObject() ); - map.setCenter(centre, 2); + fixmystreet.map.setCenter(centre, 2); + + if (document.getElementById('mapForm')) { + var click = new OpenLayers.Control.Click(); + fixmystreet.map.addControl(click); + click.activate(); + } + + var markers = new OpenLayers.Layer.Markers("Markers"); + var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' }; + for (var i=0; i<fixmystreet.pins.length; i++) { + var pin = fixmystreet.pins[i]; + var src = '/i/pin' + cols[pin[2]] + '.gif'; + var size = new OpenLayers.Size(32, 59); + var offset = new OpenLayers.Pixel(-3, -size.h-2); + var icon = new OpenLayers.Icon(src, size, offset); + var loc = new OpenLayers.LonLat(pin[1], pin[0]); + loc.transform( + new OpenLayers.Projection("EPSG:4326"), + fixmystreet.map.getProjectionObject() + ); + var marker = new OpenLayers.Marker(loc, icon); + if (pin[3]) { + marker.events.register('click', marker, function(evt) { window.location = '/report/' + pin[3]; OpenLayers.Event.stop(evt); }); + } + markers.addMarker(marker); + } + fixmystreet.map.addLayer(markers); + }); +OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { + defaultHandlerOptions: { + 'single': true, + 'double': false, + 'pixelTolerance': 0, + 'stopSingle': false, + 'stopDouble': false + }, + + initialize: function(options) { + this.handlerOptions = OpenLayers.Util.extend( + {}, this.defaultHandlerOptions + ); + OpenLayers.Control.prototype.initialize.apply( + this, arguments + ); + this.handler = new OpenLayers.Handler.Click( + this, { + 'click': this.trigger + }, this.handlerOptions + ); + }, + + trigger: function(e) { + var lonlat = fixmystreet.map.getLonLatFromViewPortPx(e.xy); + lonlat.transform( + fixmystreet.map.getProjectionObject(), + new OpenLayers.Projection("EPSG:4326") + ); + document.getElementById('fixmystreet.latitude').value = lonlat.lat; + document.getElementById('fixmystreet.longitude').value = lonlat.lon; + document.getElementById('mapForm').submit(); + } +}); // http://www.openstreetmap.org/openlayers/OpenStreetMap.js (added maxResolution) |