diff options
-rw-r--r-- | perllib/FixMyStreet/Map/Bing.pm | 4 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/FMS.pm | 8 | ||||
-rw-r--r-- | t/map/bing.t | 12 | ||||
-rw-r--r-- | t/map/fms.t | 55 |
4 files changed, 73 insertions, 6 deletions
diff --git a/perllib/FixMyStreet/Map/Bing.pm b/perllib/FixMyStreet/Map/Bing.pm index 4463b4ed2..723dcd6dc 100644 --- a/perllib/FixMyStreet/Map/Bing.pm +++ b/perllib/FixMyStreet/Map/Bing.pm @@ -39,8 +39,8 @@ sub display_map { $self->SUPER::display_map($c, %params); } -my $road_base = '//t%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 = '//t%s.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/%s?mkt=en-US&it=A,G,L&src=t&og=969&n=z'; +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 ) = @_; diff --git a/perllib/FixMyStreet/Map/FMS.pm b/perllib/FixMyStreet/Map/FMS.pm index 246d04bc0..1b556f6b3 100644 --- a/perllib/FixMyStreet/Map/FMS.pm +++ b/perllib/FixMyStreet/Map/FMS.pm @@ -24,7 +24,9 @@ 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) { + 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-', $z, $x-1, $y-1), @@ -32,7 +34,7 @@ sub map_tiles { sprintf($tile_base, 'c-', $z, $x-1, $y), sprintf($tile_base, '', $z, $x, $y), ]; - } elsif (!$ni && $z > 11) { + } elsif ($z > 11) { my $key = FixMyStreet->config('BING_MAPS_API_KEY'); my $base = "//ecn.%s.tiles.virtualearth.net/tiles/r%s?g=8702&lbl=l1&productSet=mmOS&key=$key"; return [ @@ -41,8 +43,6 @@ sub map_tiles { sprintf($base, "t2", $self->get_quadkey($x-1, $y, $z)), sprintf($base, "t3", $self->get_quadkey($x, $y, $z)), ]; - } else { - return $self->SUPER::map_tiles(%params); } } diff --git a/t/map/bing.t b/t/map/bing.t new file mode 100644 index 000000000..ae8391871 --- /dev/null +++ b/t/map/bing.t @@ -0,0 +1,12 @@ +use Test::More; +use FixMyStreet::Map::Bing; + +my $tiles = FixMyStreet::Map::Bing->map_tiles(x_tile => 8105, y_tile => 5375, zoom_act => 14); +$tiles = [ map { m{ch/([^?]*)}; $1; } @$tiles ]; +is_deeply $tiles, [ '03131132323220', '03131132323221', '03131132323222', '03131132323223' ]; + +$tiles = FixMyStreet::Map::Bing->map_tiles(x_tile => 8105, y_tile => 5375, zoom_act => 14, aerial => 1); +$tiles = [ map { m{ch/([^?]*)\?.*A,G,L}; $1; } @$tiles ]; +is_deeply $tiles, [ '03131132323220', '03131132323221', '03131132323222', '03131132323223' ]; + +done_testing(); diff --git a/t/map/fms.t b/t/map/fms.t new file mode 100644 index 000000000..3a562db26 --- /dev/null +++ b/t/map/fms.t @@ -0,0 +1,55 @@ +use Test::More; +use FixMyStreet::Map::FMS; + +# Z NI Aerial +my $expected = { + 10 => { + 0 => { + 0 => 'ch/1010100100.*?=G,L', + 1 => 'ch/1010100100.*?A,G,L', + }, + 1 => { + 0 => 'ch/1010100100.*?=G,L', + 1 => 'ch/1010100100.*?A,G,L', + }, + }, + 13 => { + 0 => { + 0 => 'r3131010100100.*?mmOS', + 1 => 'ch/3131010100100.*?A,G,L', + }, + 1 => { + 0 => 'ch/3131010100100.*?=G,L', + 1 => 'ch/3131010100100.*?A,G,L', + }, + }, + 16 => { + 0 => { + 0 => 'oml/16/32420/21504', + 1 => 'ch/0313131010100100.*?A,G,L', + }, + 1 => { + 0 => 'ch/0313131010100100.*?=G,L', + 1 => 'ch/0313131010100100.*?A,G,L', + }, + }, +}; + +subtest "Correct tiles with various parameters" => sub { + for my $aerial (0, 1) { + for my $ni (0, 1) { + for my $zoom (qw(10 13 16)) { + my $tiles = FixMyStreet::Map::FMS->map_tiles( + x_tile => 32421, y_tile => 21505, zoom_act => $zoom, + aerial => $aerial, + latitude => $ni ? 55 : 51, + longitude => $ni ? -6 : -2, + ); + my $wanted = $expected->{$zoom}{$ni}{$aerial}; + like $tiles->[0], qr/$wanted/, "with zoom $zoom, NI $ni, aerial $aerial"; + } + } + } +}; + +done_testing(); |