aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@balti.ukcod.org.uk>2010-12-04 00:08:54 +0000
committerMatthew Somerville <matthew@balti.ukcod.org.uk>2010-12-04 00:08:54 +0000
commita4ab584cfc27886373a042f83be3129fde1ccba9 (patch)
treed42ed9d63005081acdd2c62aa458bebd3d478b1c
parent92c0661cf40f9a8e39613784703bb6b2b9ac8a49 (diff)
Google Maps package.
-rw-r--r--perllib/FixMyStreet/Map/Google.pm71
-rw-r--r--web/js/map-google.js22
2 files changed, 93 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/Map/Google.pm b/perllib/FixMyStreet/Map/Google.pm
new file mode 100644
index 000000000..7a314efad
--- /dev/null
+++ b/perllib/FixMyStreet/Map/Google.pm
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+#
+# FixMyStreet:Map::Google
+# Google maps on FixMyStreet.
+#
+# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved.
+# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/
+
+package FixMyStreet::Map;
+
+use strict;
+use mySociety::GeoUtil;
+use mySociety::Web qw(ent);
+
+sub header_js {
+ return '
+<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
+<script type="text/javascript" src="/js/map-google.js"></script>
+';
+}
+
+# display_map Q PARAMS
+# PARAMS include:
+# EASTING, NORTHING for the centre point of the map
+# TYPE is 1 if the map is clickable, 2 if clickable and has a form upload,
+# 0 if not clickable
+# PINS is array of pins to show, location and colour
+# PRE/POST are HTML to show above/below map
+sub display_map {
+ my ($q, %params) = @_;
+ $params{pre} ||= '';
+ $params{post} ||= '';
+
+ foreach my $pin (@{$params{pins}}) {
+ }
+
+ my $out = FixMyStreet::Map::header($q, $params{type});
+ my ($lat, $lon) = mySociety::GeoUtil::national_grid_to_wgs84($params{easting}, $params{northing}, 'G');
+ my $copyright = _('Map contains Ordnance Survey data &copy; Crown copyright and database right 2010.');
+ $out .= <<EOF;
+<script type="text/javascript">
+var fixmystreet = {
+ 'lat': $lat,
+ 'lon': $lon
+}
+</script>
+<div id="map_box">
+ $params{pre}
+ <div id="map"></div>
+ <p id="copyright">$copyright</p>
+ $params{post}
+</div>
+<div id="side">
+EOF
+ return $out;
+}
+
+sub display_map_end {
+ my ($type) = @_;
+ my $out = '</div>';
+ $out .= '</form>' if ($type);
+ return $out;
+}
+
+sub display_pin {
+}
+
+sub map_pins {
+}
+
+1;
diff --git a/web/js/map-google.js b/web/js/map-google.js
new file mode 100644
index 000000000..77e54ab7c
--- /dev/null
+++ b/web/js/map-google.js
@@ -0,0 +1,22 @@
+YAHOO.util.Event.onContentReady('map', function() {
+ var centre = new google.maps.LatLng( fixmystreet.lat, fixmystreet.lon );
+ var map = new google.maps.Map(document.getElementById("map"), {
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
+ center: centre,
+ zoom: 16,
+ disableDefaultUI: true,
+ navigationControl: true,
+ navigationControlOptions: {
+ style: google.maps.NavigationControlStyle.SMALL
+ },
+ mapTypeControl: true,
+ mapTypeControlOptions: {
+ style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
+ }
+ });
+
+ google.maps.event.addListener(map, "zoom_changed", function() {
+ if (map.getZoom() < 13) map.setZoom(13);
+ if (map.getZoom() > 17) map.setZoom(17);
+ });
+});