aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/Map/OSM.pm3
-rwxr-xr-xweb/index.cgi4
-rw-r--r--web/js/map-OpenStreetMap.js23
3 files changed, 21 insertions, 9 deletions
diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm
index 0db09b928..820a4ce63 100644
--- a/perllib/FixMyStreet/Map/OSM.pm
+++ b/perllib/FixMyStreet/Map/OSM.pm
@@ -32,7 +32,8 @@ sub display_map {
my @pins;
foreach my $pin (@{$params{pins}}) {
- push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]' ]";
+ $pin->[3] ||= '';
+ push @pins, "[ $pin->[0], $pin->[1], '$pin->[2]', '$pin->[3]' ]";
}
my $pins = join(",\n", @pins);
diff --git a/web/index.cgi b/web/index.cgi
index 098602e5d..ded2583ea 100755
--- a/web/index.cgi
+++ b/web/index.cgi
@@ -892,7 +892,7 @@ sub display_location {
my ($on_map_all, $on_map, $around_map, $dist) = FixMyStreet::Map::map_features($q, $latitude, $longitude, $interval);
my @pins;
foreach (@$on_map_all) {
- push @pins, [ $_->{latitude}, $_->{longitude}, $_->{state} eq 'fixed' ? 'green' : 'red' ];
+ push @pins, [ $_->{latitude}, $_->{longitude}, ($_->{state} eq 'fixed' ? 'green' : 'red'), $_->{id} ];
}
my $on_list = '';
foreach (@$on_map) {
@@ -918,7 +918,7 @@ sub display_location {
$around_list .= $dist . 'km)</small>';
$around_list .= ' <small>' . _('(fixed)') . '</small>' if $_->{state} eq 'fixed';
$around_list .= '</li>';
- push @pins, [ $_->{latitude}, $_->{longitude}, $_->{state} eq 'fixed' ? 'green' : 'red' ];
+ push @pins, [ $_->{latitude}, $_->{longitude}, ($_->{state} eq 'fixed' ? 'green' : 'red'), $_->{id} ];
}
$around_list = $q->li(_('No problems found.'))
unless $around_list;
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, {