diff options
author | Marius Halden <marius.h@lden.org> | 2021-10-07 13:32:40 +0200 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2021-10-07 13:32:40 +0200 |
commit | 09dacfc6b8bf62addeee16c20b1d90c2a256da96 (patch) | |
tree | 7caa2bf9e92227ab74448f9b746dd28bbcb81b2a /perllib/FixMyStreet/Map/OSM.pm | |
parent | 585e57484f9c6332668bf1ac0a6a3b39dbe32223 (diff) | |
parent | cea89fb87a96943708a1db0f646492fbfaaf000f (diff) |
Merge tag 'v3.1' into fiksgatami-devfiksgatami-dev
Diffstat (limited to 'perllib/FixMyStreet/Map/OSM.pm')
-rw-r--r-- | perllib/FixMyStreet/Map/OSM.pm | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm index ef465d7dc..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' } @@ -21,11 +22,13 @@ sub map_template { 'osm' } sub map_javascript { [ '/vendor/OpenLayers/OpenLayers.wfs.js', '/js/map-OpenLayers.js', + FixMyStreet->config('BING_MAPS_API_KEY') ? ('/js/map-bing-ol.js') : (), '/js/map-OpenStreetMap.js', ] } sub map_tiles { my ( $self, %params ) = @_; + return FixMyStreet::Map::Bing->map_tiles(%params) if $params{aerial}; my ( $x, $y, $z ) = ( $params{x_tile}, $params{y_tile}, $params{zoom_act} ); my $tile_url = $self->base_tile_url(); return [ @@ -59,6 +62,8 @@ sub display_map { if defined $c->get_param('lon'); $params{zoomToBounds} = $params{any_zoom} && !defined $c->get_param('zoom'); + $params{aerial} = $c->get_param("aerial") && FixMyStreet->config('BING_MAPS_API_KEY') ? 1 : 0; + my %data; $data{cobrand} = $c->cobrand; $data{distance} = $c->stash->{distance}; @@ -72,17 +77,24 @@ sub generate_map_data { my $numZoomLevels = $self->ZOOM_LEVELS; my $zoomOffset = $self->MIN_ZOOM_LEVEL; + + # Adjust zoom level dependent upon population density if cobrand hasn't + # specified a default zoom. + my $default_zoom; + if (my $cobrand_default_zoom = $data->{cobrand}->default_map_zoom) { + $default_zoom = $cobrand_default_zoom; + } else { + my $dist = $data->{distance} + || FixMyStreet::Gaze::get_radius_containing_population( $params{latitude}, $params{longitude} ); + $default_zoom = $dist < 10 ? $self->DEFAULT_ZOOM : $self->DEFAULT_ZOOM - 1; + } + if ($params{any_zoom}) { - $numZoomLevels = 19; + $numZoomLevels += $zoomOffset; + $default_zoom += $zoomOffset; $zoomOffset = 0; } - # Adjust zoom level dependent upon population density - my $dist = $data->{distance} - || FixMyStreet::Gaze::get_radius_containing_population( $params{latitude}, $params{longitude} ); - my $default_zoom = $data->{cobrand}->default_map_zoom() || ($numZoomLevels - 4); - $default_zoom = $numZoomLevels - 3 if $dist < 10; - my $zoom = $data->{zoom} || $default_zoom; $zoom = $numZoomLevels - 1 if $zoom >= $numZoomLevels; $zoom = 0 if $zoom < 0; |