aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/Map
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/Map')
-rw-r--r--perllib/FixMyStreet/Map/Bing.pm7
-rw-r--r--perllib/FixMyStreet/Map/Bromley.pm4
-rw-r--r--perllib/FixMyStreet/Map/FMS.pm31
-rw-r--r--perllib/FixMyStreet/Map/Google.pm25
-rw-r--r--perllib/FixMyStreet/Map/MasterMap.pm1
-rw-r--r--perllib/FixMyStreet/Map/OSM.pm28
-rw-r--r--perllib/FixMyStreet/Map/OSM/MapQuest.pm34
-rw-r--r--perllib/FixMyStreet/Map/OSM/StreetView.pm2
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 { [