aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/Map/CheshireEast.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/Map/CheshireEast.pm')
-rw-r--r--perllib/FixMyStreet/Map/CheshireEast.pm70
1 files changed, 70 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/Map/CheshireEast.pm b/perllib/FixMyStreet/Map/CheshireEast.pm
new file mode 100644
index 000000000..4e59f2593
--- /dev/null
+++ b/perllib/FixMyStreet/Map/CheshireEast.pm
@@ -0,0 +1,70 @@
+package FixMyStreet::Map::CheshireEast;
+use base 'FixMyStreet::Map::OSM';
+
+use strict;
+use Utils;
+
+use constant MIN_ZOOM_LEVEL => 7;
+
+sub map_javascript { [
+ '/vendor/OpenLayers/OpenLayers.wfs.js',
+ '/js/map-OpenLayers.js',
+ '/js/map-cheshireeast.js',
+] }
+
+sub tile_parameters { {
+ origin_x => -3276800,
+ origin_y => 3276800,
+} }
+
+sub resolutions { (
+ 1792.003584007169,
+ 896.0017920035843,
+ 448.0008960017922,
+ 224.0004480008961,
+ 112.000224000448,
+ 56.000112000224014,
+ 28.000056000111993,
+ 14.000028000056004,
+ 7.000014000028002,
+ 2.8000056000112004,
+ 1.4000028000056002,
+ 0.7000014000028001,
+ 0.35000070000140004,
+ 0.14000028000056003,
+) }
+
+my $url = 'https://maps-cache.cheshiresharedservices.gov.uk/maps/?wmts/CE_OS_AllBasemaps_COLOUR/oscce_grid/%d/%d/%d.jpeg&KEY=3a3f5c60eca1404ea114e6941c9d3895';
+
+sub map_tiles {
+ my ( $self, %params ) = @_;
+ my ( $x, $y, $z ) = ( $params{x_tile}, $params{y_tile}, $params{zoom_act} );
+ return [
+ sprintf($url, $z, $x-1, $y-1),
+ sprintf($url, $z, $x, $y-1),
+ sprintf($url, $z, $x-1, $y),
+ sprintf($url, $z, $x, $y),
+ ];
+}
+
+sub latlon_to_tile($$$$) {
+ my ($self, $lat, $lon, $zoom) = @_;
+ my ($x, $y) = eval { Utils::convert_latlon_to_en($lat, $lon) };
+ my $tile_params = $self->tile_parameters;
+ my $res = ($self->resolutions)[$zoom];
+ my $fx = ( $x - $tile_params->{origin_x} ) / ($res * 256);
+ my $fy = ( $tile_params->{origin_y} - $y ) / ($res * 256);
+ return ( $fx, $fy );
+}
+
+sub tile_to_latlon {
+ my ($self, $fx, $fy, $zoom) = @_;
+ my $tile_params = $self->tile_parameters;
+ my $res = ($self->resolutions)[$zoom];
+ my $x = $fx * $res * 256 + $tile_params->{origin_x};
+ my $y = $tile_params->{origin_y} - $fy * $res * 256;
+ my ($lat, $lon) = Utils::convert_en_to_latlon($x, $y);
+ return ( $lat, $lon );
+}
+
+1;