aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/Map/OSM.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/Map/OSM.pm')
-rw-r--r--perllib/FixMyStreet/Map/OSM.pm28
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;