diff options
-rw-r--r-- | perllib/FixMyStreet/Map/OSM.pm | 2 | ||||
-rw-r--r-- | web/js/map-OpenStreetMap.js | 46 |
2 files changed, 44 insertions, 4 deletions
diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm index 99904a328..cd69762b7 100644 --- a/perllib/FixMyStreet/Map/OSM.pm +++ b/perllib/FixMyStreet/Map/OSM.pm @@ -36,6 +36,8 @@ sub display_map { my $out = FixMyStreet::Map::header($q, $params{type}); my $copyright = _('Map © <a href="http://www.openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'); $out .= <<EOF; +<input type="hidden" name="latitude" id="fixmystreet.latitude" value="$params{latitude}"> +<input type="hidden" name="longitude" id="fixmystreet.longitude" value="$params{longitude}"> <script type="text/javascript"> var fixmystreet = { 'latitude': $params{latitude}, diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 1eae62a9a..2c459392e 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(), @@ -12,16 +12,54 @@ YAHOO.util.Event.onContentReady('map', function() { zoomOffset: 14, numZoomLevels: 4 }); - map.addLayer(osm); + fixmystreet.map.addLayer(osm); var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); centre.transform( new OpenLayers.Projection("EPSG:4326"), - map.getProjectionObject() + fixmystreet.map.getProjectionObject() ); - map.setCenter(centre, 2); + fixmystreet.map.setCenter(centre, 2); + + var click = new OpenLayers.Control.Click(); + fixmystreet.map.addControl(click); + click.activate(); }); +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) |