diff options
-rw-r--r-- | perllib/FixMyStreet/Map/Northamptonshire.pm | 85 | ||||
-rw-r--r-- | web/js/map-wms-northamptonshire.js | 38 |
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'; + } +}; |