aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorM Somerville <matthew-github@dracos.co.uk>2020-08-13 21:15:08 +0100
committerM Somerville <matthew-github@dracos.co.uk>2020-08-14 16:41:10 +0100
commite268e2b893aaf8a99e457c085e9c77d140b77233 (patch)
treeda4ff9203cef65e41e4110909df2e3296e178868
parenta049a21d86ae8f4b92f3cf7c78f96ab777a9a88f (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.js2
-rw-r--r--.cypress/cypress/integration/regressions.js2
-rw-r--r--.cypress/cypress/integration/simple_spec.js2
-rw-r--r--CHANGELOG.md1
-rw-r--r--perllib/FixMyStreet/Cobrand/Default.pm2
-rw-r--r--perllib/FixMyStreet/Map/FMS.pm2
-rw-r--r--perllib/FixMyStreet/Map/Google.pm25
-rw-r--r--perllib/FixMyStreet/Map/MasterMap.pm1
-rw-r--r--perllib/FixMyStreet/Map/OSM.pm15
-rw-r--r--perllib/FixMyStreet/Map/OSM/StreetView.pm2
-rw-r--r--t/app/controller/around.t2
-rw-r--r--t/map/google.t2
-rw-r--r--web/js/map-OpenStreetMap.js4
-rw-r--r--web/js/map-bing-ol.js2
-rw-r--r--web/js/map-google.js2
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);