File Coverage

blib/lib/Geo/OSM/Render/Viewport/Clipped.pm
Criterion Covered Total %
statement 39 41 95.1
branch 1 2 50.0
condition 5 15 33.3
subroutine 9 9 100.0
pod 4 4 100.0
total 58 71 81.6


line stmt bran cond sub pod time code
1             # Encoding and name #_{
2              
3             =encoding utf8
4             =head1 NAME
5              
6             Geo::OSM::Render::Viewport::Clipped - Use a clipped L<> to create a map.
7              
8             =cut
9             package Geo::OSM::Render::Viewport::Clipped;
10             #_}
11             #_{ use …
12 3     3   62147 use warnings;
  3         10  
  3         107  
13 3     3   19 use strict;
  3         7  
  3         70  
14              
15 3     3   469 use utf8;
  3         20  
  3         15  
16 3     3   91 use Carp;
  3         7  
  3         196  
17 3     3   911 use Geo::OSM::Render::Viewport;
  3         19  
  3         1436  
18             our @ISA = qw(Geo::OSM::Render::Viewport);
19              
20             #_}
21             our $VERSION = 0.01;
22             #_{ Synopsis
23              
24             =head1 SYNOPSIS
25              
26             This class derives from L<>.
27              
28             =cut
29             #_}
30             #_{ Overview
31              
32             =head1 OVERVIEW
33              
34             See L.
35              
36             =cut
37              
38             #_}
39             #_{ Methods
40             #_{ POD
41             =head1 METHODS
42             =cut
43             #_}
44             sub new { #_{
45             #_{ POD
46              
47             =head2 new
48              
49             my $proj = Geo::OSM::Render::Viewport::Clipped->new(
50             x_of_map_0 => $x_left ,
51             x_of_map_width => $x_right ,
52             y_of_map_0 => $y_bottom,
53             y_of_map_height => $y_top
54             );
55              
56             =cut
57              
58             #_}
59              
60 3     3 1 107 my $class = shift;
61 3         30 my $self = $class->SUPER::new();
62 3         23 my %opts = @_;
63              
64 3   33     26 $self->{x_of_map_0 } = delete $opts{x_of_map_0 } // croak 'x_of_map_0 not given';
65 3   33     15 $self->{x_of_map_width } = delete $opts{x_of_map_width } // croak 'x_of_map_width not given';
66 3   33     14 $self->{y_of_map_0 } = delete $opts{y_of_map_0 } // croak 'y_of_map_0 not given';
67 3   33     16 $self->{y_of_map_height} = delete $opts{y_of_map_height } // croak 'y_of_map_height not given';
68              
69 3   33     19 my $max_width_height = delete $opts{max_width_height} // croak 'max_width_height not given';
70              
71 3         11 $self->{diff_width } = $self->{x_of_map_width } - $self->{x_of_map_0};
72 3         12 $self->{diff_height} = $self->{y_of_map_height} - $self->{y_of_map_0};
73              
74 3 50       18 if (abs($self->{diff_width}) > abs($self->{diff_height})) {
75 3         13 $self->{map_width } = $max_width_height;
76 3         21 $self->{map_height} = $max_width_height / abs($self->{diff_width}) * abs($self->{diff_height});
77             }
78             else {
79 0         0 $self->{map_height} = $max_width_height;
80 0         0 $self->{map_width } = $max_width_height / abs($self->{diff_height}) * abs($self->{diff_width });
81             }
82              
83              
84 3         14 return $self;
85              
86             } #_}
87             sub x_y_to_map_x_y { #_{
88             #_{ POD
89              
90             =head2 x_y_to_map_x_y
91              
92             my ($map_x, $map_y) = $projection->x_y_to_map_x_y($x, $y);
93              
94             =cut
95              
96             #_}
97              
98 14     14 1 29 my $self = shift;
99 14         17 my $x = shift;
100 14         19 my $y = shift;
101              
102 14         41 my $map_x = ( $x - $self->{x_of_map_0} ) / $self->{diff_width } * $self->map_width;
103 14         33 my $map_y = ( $y - $self->{y_of_map_0} ) / $self->{diff_height} * $self->map_height;
104              
105 14         46 return ($map_x, $map_y);
106              
107             } #_}
108             sub map_width { #_{
109             #_{ POD
110              
111             =head2 map_width
112              
113             Returns the width of the map.
114              
115             =cut
116              
117             #_}
118 16     16 1 31 my $self = shift;
119 16         40 return abs($self->{map_width});
120             } #_}
121             sub map_height { #_{
122             #_{ POD
123              
124             =head2 map_height
125              
126             Returns the height of the map.
127              
128             =cut
129              
130             #_}
131 16     16 1 26 my $self = shift;
132 16         38 return abs($self->{map_height});
133             } #_}
134             #_}
135             #_{ POD: Author
136              
137             =head1 AUTHOR
138              
139             René Nyffenegger
140              
141             =cut
142              
143             #_}
144             #_{ POD: Copyright and License
145              
146             =head1 COPYRIGHT AND LICENSE
147             Copyright © 2017 René Nyffenegger, Switzerland. All rights reserved.
148              
149             This program is free software; you can redistribute it and/or modify it
150             under the terms of the the Artistic License (2.0). You may obtain a
151             copy of the full license at: L
152             =cut
153              
154             #_}
155             #_{ POD: Source Code
156              
157             =head1 Source Code
158              
159             The source code is on L<< github|https://github.com/ReneNyffenegger/perl-Geo-OSM-Render >>. Meaningful pull requests are welcome.
160              
161             =cut
162              
163             #_}
164              
165             'tq84';