From 91ac9486a1fd2eeb65fc9c6d2fccc1b170cfc16f Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Mon, 14 Feb 2011 15:40:34 +0000 Subject: Tweaks to OSM map module, fix for truncated co-ords. --- web/js/map-OpenStreetMap.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'web/js/map-OpenStreetMap.js') diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 04237e075..1eae62a9a 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -8,15 +8,15 @@ 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); + 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"), + new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject() ); map.setCenter(centre, 2); -- cgit v1.2.3 From 7698b15bf64daee5f8b5a1080984dd1331615032 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 16 Feb 2011 20:34:30 +0000 Subject: Map clicking. --- web/js/map-OpenStreetMap.js | 46 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) (limited to 'web/js/map-OpenStreetMap.js') 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) -- cgit v1.2.3 From 2699b760e4b08b1422ab8232af4081f75627588e Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 16 Feb 2011 23:02:03 +0000 Subject: First pin pass. --- web/js/map-OpenStreetMap.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'web/js/map-OpenStreetMap.js') diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 2c459392e..0caa32b38 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -24,6 +24,19 @@ YAHOO.util.Event.onContentReady('map', function() { 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 Date: Thu, 17 Feb 2011 01:02:46 +0000 Subject: Display pins. --- web/js/map-OpenStreetMap.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'web/js/map-OpenStreetMap.js') diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 0caa32b38..c5aa318b0 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -21,9 +21,11 @@ YAHOO.util.Event.onContentReady('map', function() { ); fixmystreet.map.setCenter(centre, 2); - var click = new OpenLayers.Control.Click(); - fixmystreet.map.addControl(click); - click.activate(); + 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' }; @@ -31,12 +33,21 @@ YAHOO.util.Event.onContentReady('map', function() { 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(-(size.w/2), -size.h); + var offset = new OpenLayers.Pixel(-3, -size.h-2); var icon = new OpenLayers.Icon(src, size, offset); - markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(pin[1],pin[0]), icon)); + 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, { -- cgit v1.2.3 From 8811ccf13f29f411979b50e098f59e86066b8258 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 23 Feb 2011 13:00:12 +0000 Subject: Override PanZoom to catch zoomworld click. --- web/js/map-OpenStreetMap.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'web/js/map-OpenStreetMap.js') diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index c5aa318b0..6e350537a 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -4,7 +4,7 @@ YAHOO.util.Event.onContentReady('map', function() { new OpenLayers.Control.ArgParser(), //new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.Navigation(), - new OpenLayers.Control.PanZoom() + new OpenLayers.Control.PanZoomFMS() ], displayProjection: new OpenLayers.Projection("EPSG:4326") }); @@ -50,6 +50,43 @@ YAHOO.util.Event.onContentReady('map', function() { }); +/* Overridding the buttonDown function of PanZoom so that it does + zoomTo(0) rather than zoomToMaxExtent() +*/ +OpenLayers.Control.PanZoomFMS = OpenLayers.Class(OpenLayers.Control.PanZoom, { + buttonDown: function (evt) { + if (!OpenLayers.Event.isLeftClick(evt)) { + return; + } + + switch (this.action) { + case "panup": + this.map.pan(0, -this.getSlideFactor("h")); + break; + case "pandown": + this.map.pan(0, this.getSlideFactor("h")); + break; + case "panleft": + this.map.pan(-this.getSlideFactor("w"), 0); + break; + case "panright": + this.map.pan(this.getSlideFactor("w"), 0); + break; + case "zoomin": + this.map.zoomIn(); + break; + case "zoomout": + this.map.zoomOut(); + break; + case "zoomworld": + this.map.zoomTo(0); + break; + } + + OpenLayers.Event.stop(evt); + } +}); + OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { defaultHandlerOptions: { 'single': true, -- cgit v1.2.3 From 13098b6381416919b3e36fc3f558ca50f58fa854 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Thu, 24 Feb 2011 14:01:49 +0000 Subject: No need for all pins yet (does nothing <6 months), hide pins using OL JS if present; permalink. --- web/js/map-OpenStreetMap.js | 76 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 10 deletions(-) (limited to 'web/js/map-OpenStreetMap.js') diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 6e350537a..911d49d57 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -1,25 +1,33 @@ YAHOO.util.Event.onContentReady('map', function() { + + fixmystreet.ZOOM_OFFSET = 14; + + var perm = new OpenLayers.Control.Permalink(); fixmystreet.map = new OpenLayers.Map("map", { controls: [ new OpenLayers.Control.ArgParser(), //new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.Navigation(), + perm, + new OpenLayers.Control.PermalinkFMS('osm_link', 'http://www.openstreetmap.org/'), new OpenLayers.Control.PanZoomFMS() ], displayProjection: new OpenLayers.Projection("EPSG:4326") }); var osm = new fixmystreet.map_type("", { - zoomOffset: 14, + zoomOffset: fixmystreet.ZOOM_OFFSET, numZoomLevels: 4 }); fixmystreet.map.addLayer(osm); - var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); - centre.transform( - new OpenLayers.Projection("EPSG:4326"), - fixmystreet.map.getProjectionObject() - ); - fixmystreet.map.setCenter(centre, 2); + if (!fixmystreet.map.getCenter()) { + var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); + centre.transform( + new OpenLayers.Projection("EPSG:4326"), + fixmystreet.map.getProjectionObject() + ); + fixmystreet.map.setCenter(centre, 2); + } if (document.getElementById('mapForm')) { var click = new OpenLayers.Control.Click(); @@ -27,7 +35,17 @@ YAHOO.util.Event.onContentReady('map', function() { click.activate(); } - var markers = new OpenLayers.Layer.Markers("Markers"); + /* To let permalink not be caught by the Click layer, answer found + * at http://www.mail-archive.com/users@openlayers.org/msg12958.html + * Not sure why you can't use eventListeners or events.register... + */ + OpenLayers.Event.observe( perm.element, "click", function(e) { + OpenLayers.Event.stop(e); + location.href = OpenLayers.Event.element(e).href; + return false; + }); + + fixmystreet.markers = new OpenLayers.Layer.Markers("Markers"); var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' }; for (var i=0; i Date: Tue, 8 Mar 2011 11:32:33 +0000 Subject: Store report ID on loop, as otherwise closure uses last value. --- web/js/map-OpenStreetMap.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'web/js/map-OpenStreetMap.js') diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 911d49d57..4f5bf6fdf 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -60,7 +60,11 @@ YAHOO.util.Event.onContentReady('map', function() { ); 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); }); + marker.id = pin[3]; + marker.events.register('click', marker, function(evt) { + window.location = '/report/' + this.id; + OpenLayers.Event.stop(evt); + }); } fixmystreet.markers.addMarker(marker); } -- cgit v1.2.3 From c56f704e998b418aa3f11d5e3b6b86d6c7ce40e6 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Wed, 9 Mar 2011 22:21:04 +0000 Subject: Fixes to other map types to work with lat/lon. Split OSM JavaScript into core OpenLayers bits and OSM config bit. --- web/js/map-OpenStreetMap.js | 191 +++----------------------------------------- 1 file changed, 9 insertions(+), 182 deletions(-) (limited to 'web/js/map-OpenStreetMap.js') diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 4f5bf6fdf..9d226f6a7 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -1,186 +1,13 @@ -YAHOO.util.Event.onContentReady('map', function() { - - fixmystreet.ZOOM_OFFSET = 14; - - var perm = new OpenLayers.Control.Permalink(); - fixmystreet.map = new OpenLayers.Map("map", { - controls: [ - new OpenLayers.Control.ArgParser(), - //new OpenLayers.Control.LayerSwitcher(), - new OpenLayers.Control.Navigation(), - perm, - new OpenLayers.Control.PermalinkFMS('osm_link', 'http://www.openstreetmap.org/'), - new OpenLayers.Control.PanZoomFMS() - ], - displayProjection: new OpenLayers.Projection("EPSG:4326") - }); - var osm = new fixmystreet.map_type("", { - zoomOffset: fixmystreet.ZOOM_OFFSET, - numZoomLevels: 4 - }); - fixmystreet.map.addLayer(osm); - - if (!fixmystreet.map.getCenter()) { - var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); - centre.transform( - new OpenLayers.Projection("EPSG:4326"), - fixmystreet.map.getProjectionObject() - ); - fixmystreet.map.setCenter(centre, 2); - } - - if (document.getElementById('mapForm')) { - var click = new OpenLayers.Control.Click(); - fixmystreet.map.addControl(click); - click.activate(); - } - - /* To let permalink not be caught by the Click layer, answer found - * at http://www.mail-archive.com/users@openlayers.org/msg12958.html - * Not sure why you can't use eventListeners or events.register... - */ - OpenLayers.Event.observe( perm.element, "click", function(e) { - OpenLayers.Event.stop(e); - location.href = OpenLayers.Event.element(e).href; - return false; - }); - - fixmystreet.markers = new OpenLayers.Layer.Markers("Markers"); - var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' }; - for (var i=0; i