aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/Map/Northamptonshire.pm85
-rw-r--r--web/js/map-wms-northamptonshire.js38
2 files changed, 123 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/Map/Northamptonshire.pm b/perllib/FixMyStreet/Map/Northamptonshire.pm
new file mode 100644
index 000000000..81f7e45eb
--- /dev/null
+++ b/perllib/FixMyStreet/Map/Northamptonshire.pm
@@ -0,0 +1,85 @@
+package FixMyStreet::Map::Northamptonshire;
+use base 'FixMyStreet::Map::WMSBase';
+
+use strict;
+
+sub default_zoom { 8; }
+
+sub urls { [ 'https://maps.northamptonshire.gov.uk/interactivemappingwms/getmap.ashx' ] }
+
+sub layer_names{ [ 'BaseMap' ] }
+
+sub copyright {
+ return '© NCC';
+}
+
+sub scales {
+ my $self = shift;
+ my @scales = (
+ '300000',
+ '200000',
+ '100000',
+ '75000',
+ '50000',
+ '25000',
+ '10000',
+ '8000',
+ '6000',
+ '4000',
+ '2000',
+ '1000',
+ '400',
+ );
+ return @scales;
+}
+sub tile_parameters {
+ my $self = shift;
+ my $params = {
+ urls => $self->urls,
+ layer_names => $self->layer_names,
+ wms_version => '1.1.1',
+ layer_style => 'default',
+ format => 'image/png', # appended to tile URLs
+ size => 256, # pixels
+ dpi => 96,
+ inches_per_unit => 39.3701,
+ projection => 'EPSG:27700',
+ };
+ return $params;
+}
+
+sub zoom_parameters {
+ my $self = shift;
+ my $params = {
+ zoom_levels => scalar $self->scales,
+ default_zoom => 7,
+ min_zoom_level => 1,
+ id_offset => 0,
+ };
+ return $params;
+}
+
+# Reproject a WGS84 lat/lon into BNG easting/northing
+sub reproject_from_latlon($$$) {
+ my ($self, $lat, $lon) = @_;
+ # do not try to reproject if we have no co-ordindates as convert breaks
+ return (0.0, 0.0) if $lat == 0 && $lon == 0;
+ my ($x, $y) = Utils::convert_latlon_to_en($lat, $lon);
+ return ($x, $y);
+}
+
+# Reproject a BNG easting/northing into WGS84 lat/lon
+sub reproject_to_latlon($$$) {
+ my ($self, $x, $y) = @_;
+ my ($lat, $lon) = Utils::convert_en_to_latlon($x, $y);
+ return ($lat, $lon);
+}
+
+sub map_javascript { [
+ '/vendor/OpenLayers/OpenLayers.wms.js',
+ '/js/map-OpenLayers.js',
+ '/js/map-wms-base.js',
+ '/js/map-wms-northamptonshire.js',
+] }
+
+1;
diff --git a/web/js/map-wms-northamptonshire.js b/web/js/map-wms-northamptonshire.js
new file mode 100644
index 000000000..40d6d10a8
--- /dev/null
+++ b/web/js/map-wms-northamptonshire.js
@@ -0,0 +1,38 @@
+/*
+ * Maps for FMS using Northamptonshire's tile server
+ */
+
+fixmystreet.maps.layer_bounds = new OpenLayers.Bounds(
+395000,210000,572000,325000
+);
+
+/*
+ * maps.config() is called on dom ready in map-OpenLayers.js
+ * to setup the way the map should operate.
+ */
+fixmystreet.maps.config = function() {
+ fixmystreet.controls = [
+ new OpenLayers.Control.ArgParserFMS(),
+ new OpenLayers.Control.Navigation(),
+ new OpenLayers.Control.PermalinkFMS('map'),
+ new OpenLayers.Control.PanZoomFMS({id: 'fms_pan_zoom' })
+ ];
+
+ /* Linking back to around from report page, keeping track of map moves */
+ if ( fixmystreet.page == 'report' ) {
+ fixmystreet.controls.push( new OpenLayers.Control.PermalinkFMS('key-tool-problems-nearby', '/around') );
+ }
+
+ this.setup_wms_base_map();
+};
+
+fixmystreet.maps.marker_size = function() {
+ var zoom = fixmystreet.map.getZoom() + fixmystreet.zoomOffset;
+ if (zoom >= 8) {
+ return 'normal';
+ } else if (zoom >= 4) {
+ return 'small';
+ } else {
+ return 'mini';
+ }
+};