diff options
author | Matthew Somerville <matthew@mysociety.org> | 2011-06-24 16:18:54 +0100 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2011-06-24 16:18:54 +0100 |
commit | 9be7fa6404bb1acc34a07e665b8ba4675b5261db (patch) | |
tree | 0764b9264b35122dd92f0b6b64381d97c25cc973 | |
parent | 1571202964425b119ccf056495273e1653caad86 (diff) |
Make zoom levels more configurable.
-rw-r--r-- | perllib/FixMyStreet/Map/FMS.pm | 3 | ||||
-rw-r--r-- | perllib/FixMyStreet/Map/OSM.pm | 19 | ||||
-rw-r--r-- | templates/web/default/maps/openlayers.html | 6 | ||||
-rw-r--r-- | web/js/map-OpenLayers.js | 6 | ||||
-rw-r--r-- | web/js/map-bing-ol.js | 1 |
5 files changed, 20 insertions, 15 deletions
diff --git a/perllib/FixMyStreet/Map/FMS.pm b/perllib/FixMyStreet/Map/FMS.pm index d0a28be9b..a5a2dd9f0 100644 --- a/perllib/FixMyStreet/Map/FMS.pm +++ b/perllib/FixMyStreet/Map/FMS.pm @@ -11,9 +11,6 @@ use base 'FixMyStreet::Map::OSM'; use strict; -use constant ZOOM_LEVELS => 5; -use constant MIN_ZOOM_LEVEL => 13; - # Is set by the JavaScript sub map_type { return '""'; diff --git a/perllib/FixMyStreet/Map/OSM.pm b/perllib/FixMyStreet/Map/OSM.pm index 4543ce2da..9b968b4f6 100644 --- a/perllib/FixMyStreet/Map/OSM.pm +++ b/perllib/FixMyStreet/Map/OSM.pm @@ -51,10 +51,17 @@ sub copyright { sub display_map { my ($self, $c, %params) = @_; + my $numZoomLevels = ZOOM_LEVELS; + my $zoomOffset = MIN_ZOOM_LEVEL; + if ($params{any_zoom}) { + $numZoomLevels = 18; + $zoomOffset = 0; + } + # Adjust zoom level dependent upon population density my $dist = mySociety::Gaze::get_radius_containing_population( $params{latitude}, $params{longitude}, 200_000 ); - my $default_zoom = ZOOM_LEVELS - 3; - $default_zoom = ZOOM_LEVELS - 2 if $dist < 10; + my $default_zoom = $numZoomLevels - 3; + $default_zoom = $numZoomLevels - 2 if $dist < 10; # Map centre may be overridden in the query string $params{latitude} = Utils::truncate_coordinate($c->req->params->{lat} + 0) @@ -63,9 +70,9 @@ sub display_map { if defined $c->req->params->{lon}; my $zoom = defined $c->req->params->{zoom} ? $c->req->params->{zoom} + 0 : $default_zoom; - $zoom = ZOOM_LEVELS - 1 if $zoom >= ZOOM_LEVELS; + $zoom = $numZoomLevels - 1 if $zoom >= $numZoomLevels; $zoom = 0 if $zoom < 0; - my $zoom_act = MIN_ZOOM_LEVEL + $zoom; + my $zoom_act = $zoomOffset + $zoom; my ($x_tile, $y_tile) = latlon_to_tile_with_adjust($params{latitude}, $params{longitude}, $zoom_act); foreach my $pin (@{$params{pins}}) { @@ -82,7 +89,8 @@ sub display_map { y_tile => $y_tile, zoom => $zoom, zoom_act => $zoom_act, - zoom_levels => ZOOM_LEVELS, + zoomOffset => $zoomOffset, + numZoomLevels => $numZoomLevels, compass => compass( $x_tile, $y_tile, $zoom_act ), }; } @@ -158,6 +166,7 @@ sub click_to_tile { # Given some click co-ords (the tile they were on, and where in the # tile they were), convert to WGS84 and return. +# XXX Note use of MIN_ZOOM_LEVEL here. sub click_to_wgs84 { my ($self, $c, $pin_tile_x, $pin_x, $pin_tile_y, $pin_y) = @_; my $tile_x = click_to_tile($pin_tile_x, $pin_x); diff --git a/templates/web/default/maps/openlayers.html b/templates/web/default/maps/openlayers.html index ae670ce13..7da732913 100644 --- a/templates/web/default/maps/openlayers.html +++ b/templates/web/default/maps/openlayers.html @@ -12,6 +12,8 @@ var fixmystreet = { [% IF map.zoom -%] 'zoom': [% map.zoom %], [%- END %] + 'numZoomLevels': [% map.numZoomLevels %], + 'zoomOffset': [% map.zoomOffset %], 'map_type': [% map.map_type %], 'pins': [% INCLUDE maps/pins_js.html %] } @@ -51,9 +53,9 @@ var fixmystreet = { east = c.uri_with( { lat = map.compass.east.0, lon = map.compass.east.1, zoom = map.zoom } ) west = c.uri_with( { lat = map.compass.west.0, lon = map.compass.west.1, zoom = map.zoom } ) world = c.uri_with( { zoom = 0 } ); - SET zoom_in = c.uri_with( { zoom = map.zoom + 1 } ) IF map.zoom < map.zoom_levels - 1; + SET zoom_in = c.uri_with( { zoom = map.zoom + 1 } ) IF map.zoom < map.numZoomLevels - 1; SET zoom_out = c.uri_with( { zoom = map.zoom - 1 } ) IF map.zoom > 0; - SET zoom_in = '#' IF map.zoom >= map.zoom_levels - 1; + SET zoom_in = '#' IF map.zoom >= map.numZoomLevels - 1; SET zoom_out = '#' IF map.zoom <= 0; %] <div style="position: absolute; left: 4px; top: 4px; z-index: 1007;" class="olControlPanZoom olControlNoSelect" unselectable="on"> diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index 22492e400..83e535f1c 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -1,7 +1,5 @@ YAHOO.util.Event.onContentReady('map', function() { - fixmystreet.ZOOM_OFFSET = 13; - var perm = new OpenLayers.Control.Permalink(); set_map_config(perm); @@ -11,9 +9,9 @@ YAHOO.util.Event.onContentReady('map', function() { }); fixmystreet.layer_options = OpenLayers.Util.extend({ - zoomOffset: fixmystreet.ZOOM_OFFSET, + zoomOffset: fixmystreet.zoomOffset, transitionEffect: 'resize', - numZoomLevels: 5 + numZoomLevels: fixmystreet.numZoomLevels }, fixmystreet.layer_options); var layer = new fixmystreet.map_type("", fixmystreet.layer_options); fixmystreet.map.addLayer(layer); diff --git a/web/js/map-bing-ol.js b/web/js/map-bing-ol.js index 00c3a487f..c3c3b994e 100644 --- a/web/js/map-bing-ol.js +++ b/web/js/map-bing-ol.js @@ -1,5 +1,4 @@ function set_map_config(perm) { - fixmystreet.ZOOM_OFFSET = 13; fixmystreet.controls = [ new OpenLayers.Control.ArgParser(), new OpenLayers.Control.Navigation(), |