diff options
author | M Somerville <matthew-github@dracos.co.uk> | 2020-08-13 21:15:08 +0100 |
---|---|---|
committer | M Somerville <matthew-github@dracos.co.uk> | 2020-08-14 16:41:10 +0100 |
commit | e268e2b893aaf8a99e457c085e9c77d140b77233 (patch) | |
tree | da4ff9203cef65e41e4110909df2e3296e178868 | |
parent | a049a21d86ae8f4b92f3cf7c78f96ab777a9a88f (diff) |
Allow one more zoom level on most map types.
Not on StreetView/OpenMap Local based, which are not available.
-rw-r--r-- | .cypress/cypress/integration/around_filters.js | 2 | ||||
-rw-r--r-- | .cypress/cypress/integration/regressions.js | 2 | ||||
-rw-r--r-- | .cypress/cypress/integration/simple_spec.js | 2 | ||||
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/Default.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/FMS.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/Google.pm | 25 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/MasterMap.pm | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/OSM.pm | 15 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/OSM/StreetView.pm | 2 | ||||
-rw-r--r-- | t/app/controller/around.t | 2 | ||||
-rw-r--r-- | t/map/google.t | 2 | ||||
-rw-r--r-- | web/js/map-OpenStreetMap.js | 4 | ||||
-rw-r--r-- | web/js/map-bing-ol.js | 2 | ||||
-rw-r--r-- | web/js/map-google.js | 2 |
15 files changed, 41 insertions, 25 deletions
diff --git a/.cypress/cypress/integration/around_filters.js b/.cypress/cypress/integration/around_filters.js index 46d1f8477..c79359574 100644 --- a/.cypress/cypress/integration/around_filters.js +++ b/.cypress/cypress/integration/around_filters.js @@ -112,7 +112,7 @@ describe('Around page filtering and push state', function() { cy.route('/report/*').as('show-report'); cy.route('/reports/*').as('show-all'); cy.route('/mapit/area/*').as('get-geometry'); - cy.visit('/around?lon=-2.295894&lat=51.526877&zoom=6'); + cy.visit('/around?lon=-2.295894&lat=51.526877&zoom=0'); // get the second image which is the pin, first is the shadow cy.get('image[title="Lights out in tunnel"]:last').invoke('attr', 'xlink:href').should('contain', 'small'); // force to hopefully work around apparent Cypress SVG issue diff --git a/.cypress/cypress/integration/regressions.js b/.cypress/cypress/integration/regressions.js index f1f557219..57176223f 100644 --- a/.cypress/cypress/integration/regressions.js +++ b/.cypress/cypress/integration/regressions.js @@ -46,7 +46,7 @@ describe('Regression tests', function() { it('hides the report when going from around to report to form', function() { cy.server(); cy.route('/report/*').as('show-report'); - cy.visit('/around?lon=-2.295894&lat=51.526877&zoom=6'); + cy.visit('/around?lon=-2.295894&lat=51.526877&zoom=0'); // force to hopefully work around apparent Cypress SVG issue cy.get('image[title="Lights out in tunnel"]:last').click({force: true}); cy.wait('@show-report'); diff --git a/.cypress/cypress/integration/simple_spec.js b/.cypress/cypress/integration/simple_spec.js index 8b658b21b..e2b776d21 100644 --- a/.cypress/cypress/integration/simple_spec.js +++ b/.cypress/cypress/integration/simple_spec.js @@ -47,7 +47,7 @@ describe('Leaving updates', function() { cy.route('/report/*').as('show-report'); cy.route('/reports/*').as('show-all'); cy.route('/mapit/area/*').as('get-geometry'); - cy.visit('/around?lon=-2.295894&lat=51.526877&zoom=6'); + cy.visit('/around?lon=-2.295894&lat=51.526877&zoom=0'); // force to hopefully work around apparent Cypress SVG issue cy.get('image[title="Lights out in tunnel"]:last').click({force: true}); cy.wait('@show-report'); diff --git a/CHANGELOG.md b/CHANGELOG.md index a2e197f5c..9460a204e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Add option of checking passwords against Have I Been Pwned. - Add aerial maps option to Bing and OSM maps. - Select matches for both filter category and group. #3110 + - Add an extra zoom level to most map types. #3130 - Changes: - Mark user as active when sent an email alert. - Bugfixes: diff --git a/perllib/FixMyStreet/Cobrand/Default.pm b/perllib/FixMyStreet/Cobrand/Default.pm index 82b3b7f45..2dfb0d7b1 100644 --- a/perllib/FixMyStreet/Cobrand/Default.pm +++ b/perllib/FixMyStreet/Cobrand/Default.pm @@ -1072,7 +1072,7 @@ sub can_support_problems { return 0; } =item default_map_zoom default_map_zoom is used when displaying a map overriding the -default of max-4 or max-3 depending on population density. +default that depends on population density. =cut diff --git a/perllib/FixMyStreet/Map/FMS.pm b/perllib/FixMyStreet/Map/FMS.pm index 1b556f6b3..53d911a57 100644 --- a/perllib/FixMyStreet/Map/FMS.pm +++ b/perllib/FixMyStreet/Map/FMS.pm @@ -9,6 +9,8 @@ use base 'FixMyStreet::Map::Bing'; use strict; +use constant ZOOM_LEVELS => 6; + sub map_template { 'fms' } sub map_javascript { [ diff --git a/perllib/FixMyStreet/Map/Google.pm b/perllib/FixMyStreet/Map/Google.pm index c1fb05e43..dfebef5a3 100644 --- a/perllib/FixMyStreet/Map/Google.pm +++ b/perllib/FixMyStreet/Map/Google.pm @@ -10,8 +10,9 @@ use strict; use FixMyStreet::Gaze; use Utils; -use constant ZOOM_LEVELS => 6; +use constant ZOOM_LEVELS => 7; use constant MIN_ZOOM_LEVEL => 13; +use constant DEFAULT_ZOOM => 3; sub map_javascript { [ "http://maps.googleapis.com/maps/api/js?sensor=false", @@ -28,16 +29,16 @@ sub display_map { my $numZoomLevels = ZOOM_LEVELS; my $zoomOffset = MIN_ZOOM_LEVEL; - if ($params{any_zoom}) { - $numZoomLevels = 19; - $zoomOffset = 0; - } # Adjust zoom level dependent upon population density - my $dist = $c->stash->{distance} - || FixMyStreet::Gaze::get_radius_containing_population( $params{latitude}, $params{longitude} ); - my $default_zoom = $c->cobrand->default_map_zoom() ? $c->cobrand->default_map_zoom() : $numZoomLevels - 4; - $default_zoom = $numZoomLevels - 3 if $dist < 10; + my $default_zoom; + if (my $cobrand_default_zoom = $c->cobrand->default_map_zoom) { + $default_zoom = $cobrand_default_zoom; + } else { + my $dist = $c->stash->{distance} + || FixMyStreet::Gaze::get_radius_containing_population( $params{latitude}, $params{longitude} ); + $default_zoom = $dist < 10 ? $self->DEFAULT_ZOOM : $self->DEFAULT_ZOOM - 1; + } # Map centre may be overridden in the query string $params{latitude} = Utils::truncate_coordinate($c->get_param('lat') + 0) @@ -46,6 +47,12 @@ sub display_map { if defined $c->get_param('lon'); $params{zoomToBounds} = $params{any_zoom} && !defined $c->get_param('zoom'); + if ($params{any_zoom}) { + $numZoomLevels += $zoomOffset; + $default_zoom += $zoomOffset; + $zoomOffset = 0; + } + my $zoom = defined $c->get_param('zoom') ? $c->get_param('zoom') + 0 : $default_zoom; $zoom = $numZoomLevels - 1 if $zoom >= $numZoomLevels; $zoom = 0 if $zoom < 0; diff --git a/perllib/FixMyStreet/Map/MasterMap.pm b/perllib/FixMyStreet/Map/MasterMap.pm index d66234bbf..5edbb28fb 100644 --- a/perllib/FixMyStreet/Map/MasterMap.pm +++ b/perllib/FixMyStreet/Map/MasterMap.pm @@ -8,6 +8,7 @@ use base 'FixMyStreet::Map::FMS'; use strict; use constant ZOOM_LEVELS => 7; +use constant DEFAULT_ZOOM => 4; sub map_template { 'fms' } diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm index 47c1c8535..082605568 100644 --- a/perllib/FixMyStreet/Map/OSM.pm +++ b/perllib/FixMyStreet/Map/OSM.pm @@ -11,8 +11,9 @@ use Math::Trig; use FixMyStreet::Gaze; use Utils; -use constant ZOOM_LEVELS => 6; +use constant ZOOM_LEVELS => 7; use constant MIN_ZOOM_LEVEL => 13; +use constant DEFAULT_ZOOM => 3; sub map_type { 'OpenLayers.Layer.OSM.Mapnik' } @@ -76,10 +77,6 @@ sub generate_map_data { my $numZoomLevels = $self->ZOOM_LEVELS; my $zoomOffset = $self->MIN_ZOOM_LEVEL; - if ($params{any_zoom}) { - $numZoomLevels = 19; - $zoomOffset = 0; - } # Adjust zoom level dependent upon population density if cobrand hasn't # specified a default zoom. @@ -89,7 +86,13 @@ sub generate_map_data { } else { my $dist = $data->{distance} || FixMyStreet::Gaze::get_radius_containing_population( $params{latitude}, $params{longitude} ); - $default_zoom = $dist < 10 ? $numZoomLevels - 3 : $numZoomLevels - 4; + $default_zoom = $dist < 10 ? $self->DEFAULT_ZOOM : $self->DEFAULT_ZOOM - 1; + } + + if ($params{any_zoom}) { + $numZoomLevels += $zoomOffset; + $default_zoom += $zoomOffset; + $zoomOffset = 0; } my $zoom = $data->{zoom} || $default_zoom; diff --git a/perllib/FixMyStreet/Map/OSM/StreetView.pm b/perllib/FixMyStreet/Map/OSM/StreetView.pm index 3281faa35..820a3b87f 100644 --- a/perllib/FixMyStreet/Map/OSM/StreetView.pm +++ b/perllib/FixMyStreet/Map/OSM/StreetView.pm @@ -9,6 +9,8 @@ use base 'FixMyStreet::Map::OSM'; use strict; +use constant ZOOM_LEVELS => 6; + sub map_type { '' } sub map_javascript { [ diff --git a/t/app/controller/around.t b/t/app/controller/around.t index ba5f8c48a..29752ab02 100644 --- a/t/app/controller/around.t +++ b/t/app/controller/around.t @@ -413,7 +413,7 @@ subtest 'check map zoom level customisation' => sub { MAP_TYPE => 'OSM', }, sub { $mech->get('/around?latitude=51.754926&longitude=-1.256179'); - $mech->content_contains('data-numZoomLevels=6'); + $mech->content_contains('data-numZoomLevels=7'); $mech->content_contains('data-zoomOffset=13'); }; diff --git a/t/map/google.t b/t/map/google.t index e2877f53c..e97279072 100644 --- a/t/map/google.t +++ b/t/map/google.t @@ -13,7 +13,7 @@ is_deeply $c->stash->{map}, { type => 'google', zoom => 15, zoomOffset => 0, - numZoomLevels => 19, + numZoomLevels => 20, zoom_act => 15, }; diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 4dc862be6..46aba1c91 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -41,7 +41,7 @@ OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, { options = OpenLayers.Util.extend({ /* Below line added to OSM's file in order to allow minimum zoom level */ maxResolution: 156543.03390625/Math.pow(2, options.zoomOffset || 0), - numZoomLevels: 19, + numZoomLevels: 20, buffer: 0 }, options); var newArguments = [name, url, options]; @@ -74,7 +74,7 @@ OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, { options = OpenLayers.Util.extend({ /* Below line added to OSM's file in order to allow minimum zoom level */ maxResolution: 156543.03390625/Math.pow(2, options.zoomOffset || 0), - numZoomLevels: 19, + numZoomLevels: 20, buffer: 0 }, options); var newArguments = [name, url, options]; diff --git a/web/js/map-bing-ol.js b/web/js/map-bing-ol.js index 179238633..c44cf96f8 100644 --- a/web/js/map-bing-ol.js +++ b/web/js/map-bing-ol.js @@ -66,7 +66,7 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, { options = OpenLayers.Util.extend({ /* Below line added to OSM's file in order to allow minimum zoom level */ maxResolution: 156543.03390625/Math.pow(2, options.zoomOffset || 0), - numZoomLevels: 19, + numZoomLevels: 20, sphericalMercator: true, buffer: 0 }, options); diff --git a/web/js/map-google.js b/web/js/map-google.js index fc515b9dd..801fed210 100644 --- a/web/js/map-google.js +++ b/web/js/map-google.js @@ -156,7 +156,7 @@ fixmystreet.maps = {}; }; if (!fixmystreet.zoomToBounds) { map_args.minZoom = 13; - map_args.maxZoom = 18; + map_args.maxZoom = 19; } fixmystreet.map = new google.maps.Map(document.getElementById("map"), map_args); |