diff options
Diffstat (limited to 'perllib/FixMyStreet/Map')
-rw-r--r-- | perllib/FixMyStreet/Map/Bing.pm | 7 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/Bromley.pm | 4 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/FMS.pm | 31 | ||||
-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 | 28 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/OSM/MapQuest.pm | 34 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/OSM/StreetView.pm | 2 |
8 files changed, 59 insertions, 73 deletions
diff --git a/perllib/FixMyStreet/Map/Bing.pm b/perllib/FixMyStreet/Map/Bing.pm index 97a0d229f..17bdc3a53 100644 --- a/perllib/FixMyStreet/Map/Bing.pm +++ b/perllib/FixMyStreet/Map/Bing.pm @@ -29,14 +29,13 @@ sub get_quadkey { return $key; } -sub map_tile_base { - '', "//ecn.%s.tiles.virtualearth.net/tiles/r%s.png?g=6570"; -} +my $road_base = '//%s.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/%s?mkt=en-US&it=G,L&src=t&shading=hill&og=969&n=z'; +my $aerial_base = '//%s.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/%s?mkt=en-US&it=A,G,L&src=t&og=969&n=z'; sub map_tiles { my ( $self, %params ) = @_; my ( $x, $y, $z ) = ( $params{x_tile}, $params{y_tile}, $params{zoom_act} ); - my ($tile_sep, $tile_base) = $self->map_tile_base; + my $tile_base = $params{aerial} ? $aerial_base : $road_base; return [ sprintf($tile_base, 't0', $self->get_quadkey($x-1, $y-1, $z)), sprintf($tile_base, 't1', $self->get_quadkey($x, $y-1, $z)), diff --git a/perllib/FixMyStreet/Map/Bromley.pm b/perllib/FixMyStreet/Map/Bromley.pm index 518382fc0..29063778e 100644 --- a/perllib/FixMyStreet/Map/Bromley.pm +++ b/perllib/FixMyStreet/Map/Bromley.pm @@ -9,8 +9,6 @@ use base 'FixMyStreet::Map::FMS'; use strict; -sub map_tile_base { - '-', "//%stilma.mysociety.org/bromley/%d/%d/%d.png"; -} +sub map_tile_base { "bromley" } 1; diff --git a/perllib/FixMyStreet/Map/FMS.pm b/perllib/FixMyStreet/Map/FMS.pm index 126fc34bf..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 { [ @@ -18,31 +20,30 @@ sub map_javascript { [ '/js/map-fms.js', ] } -sub map_tile_base { - '-', "//%stilma.mysociety.org/oml/%d/%d/%d.png"; -} +sub map_tile_base { "oml" } sub map_tiles { my ( $self, %params ) = @_; my ( $x, $y, $z ) = ( $params{x_tile}, $params{y_tile}, $params{zoom_act} ); my $ni = in_northern_ireland_box( $params{latitude}, $params{longitude} ); - if (!$ni && $z >= 16) { - my ($tile_sep, $tile_base) = $self->map_tile_base; + if ($params{aerial} || $ni || $z <= 11) { + return $self->SUPER::map_tiles(%params); + } elsif ($z >= 16) { + my $tile_base = '//%stilma.mysociety.org/' . $self->map_tile_base . '/%d/%d/%d.png'; return [ - sprintf($tile_base, 'a' . $tile_sep, $z, $x-1, $y-1), - sprintf($tile_base, 'b' . $tile_sep, $z, $x, $y-1), - sprintf($tile_base, 'c' . $tile_sep, $z, $x-1, $y), + sprintf($tile_base, 'a-', $z, $x-1, $y-1), + sprintf($tile_base, 'b-', $z, $x, $y-1), + sprintf($tile_base, 'c-', $z, $x-1, $y), sprintf($tile_base, '', $z, $x, $y), ]; - } else { + } elsif ($z > 11) { my $key = FixMyStreet->config('BING_MAPS_API_KEY'); - my $url = "g=6570"; - $url .= "&productSet=mmOS&key=$key" if $z > 11 && !$ni; + my $base = "//ecn.%s.tiles.virtualearth.net/tiles/r%s?g=8702&lbl=l1&productSet=mmOS&key=$key"; return [ - "//ecn.t0.tiles.virtualearth.net/tiles/r" . $self->get_quadkey($x-1, $y-1, $z) . ".png?$url", - "//ecn.t1.tiles.virtualearth.net/tiles/r" . $self->get_quadkey($x, $y-1, $z) . ".png?$url", - "//ecn.t2.tiles.virtualearth.net/tiles/r" . $self->get_quadkey($x-1, $y, $z) . ".png?$url", - "//ecn.t3.tiles.virtualearth.net/tiles/r" . $self->get_quadkey($x, $y, $z) . ".png?$url", + sprintf($base, "t0", $self->get_quadkey($x-1, $y-1, $z)), + sprintf($base, "t1", $self->get_quadkey($x, $y-1, $z)), + sprintf($base, "t2", $self->get_quadkey($x-1, $y, $z)), + sprintf($base, "t3", $self->get_quadkey($x, $y, $z)), ]; } } 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 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; diff --git a/perllib/FixMyStreet/Map/OSM/MapQuest.pm b/perllib/FixMyStreet/Map/OSM/MapQuest.pm deleted file mode 100644 index 8b24e1ba2..000000000 --- a/perllib/FixMyStreet/Map/OSM/MapQuest.pm +++ /dev/null @@ -1,34 +0,0 @@ -# FixMyStreet:Map::OSM::CycleMap -# OSM CycleMap maps on FixMyStreet. -# -# Copyright (c) 2010 UK Citizens Online Democracy. All rights reserved. -# Email: matthew@mysociety.org; WWW: http://www.mysociety.org/ - -package FixMyStreet::Map::OSM::MapQuest; -use base 'FixMyStreet::Map::OSM'; - -use strict; - -sub map_type { 'OpenLayers.Layer.OSM.MapQuestOpen' } - -sub map_tiles { - my ( $self, %params ) = @_; - my ( $x, $y, $z ) = ( $params{x_tile}, $params{y_tile}, $params{zoom_act} ); - my $tile_url = $self->base_tile_url(); - return [ - "https://otile1-s.$tile_url/$z/" . ($x - 1) . "/" . ($y - 1) . ".png", - "https://otile2-s.$tile_url/$z/$x/" . ($y - 1) . ".png", - "https://otile3-s.$tile_url/$z/" . ($x - 1) . "/$y.png", - "https://otile4-s.$tile_url/$z/$x/$y.png", - ]; -} - -sub base_tile_url { - return 'mqcdn.com/tiles/1.0.0/map/'; -} - -sub copyright { - 'Data, imagery and map information provided by <a href="https://www.mapquest.com/">MapQuest</a> <img src="https://developer.mapquest.com/sites/default/files/mapquest/osm/mq_logo.png" />, <a href="https://openstreetmap.org/">OpenStreetMap</a> and contributors, <a href="https://opendatacommons.org/licenses/odbl/">ODbL</a>' -} - -1; 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 { [ |