File Coverage

blib/lib/Strava/GPX.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package Strava::GPX;
2              
3 1     1   25021 use strict;
  1         3  
  1         47  
4 1     1   6 use warnings;
  1         2  
  1         49  
5              
6             our $VERSION = 0.01;
7              
8 1     1   6724 use LWP::UserAgent;
  1         109461  
  1         39  
9 1     1   561 use Geo::Gpx;
  0            
  0            
10              
11             sub new {
12             my ($class, $url) = @_;
13              
14             $url = URI->new($url);
15              
16             my $ua = LWP::UserAgent->new;
17             my $res = $ua->get($url);
18              
19             die unless $res->code == 200;
20              
21             # {
22             # distance: [0.0,..],
23             # altitude: [1868.6,..],
24             # elevLow: 1812.0,
25             # elevHigh: 2130.6,
26             # latlng: [[ 1.1, 2.2],[..,..]]
27              
28             my %self;
29             bless \%self, $class;
30             my ($latlng) = $res->content =~ m/CourseMap.*?latlng:\s(\S+)\,/s;
31              
32             $self{latlng} = eval $latlng;
33              
34             return \%self;
35             }
36              
37             sub to_gpx {
38             my $self = shift;
39              
40             my $gpx = Geo::Gpx->new;
41             my @points;
42             foreach my $latlng ( @{$self->{latlng}} ) {
43             push @points, { lat => $latlng->[0], lon => $latlng->[1] };
44             }
45             my $tracks = [ { name => $self->{url},
46             segments => [ { points => \@points, } ], } ];
47             $gpx->tracks($tracks);
48              
49             return $gpx->xml( '1.0' );
50             }
51              
52             __END__