#!/usr/bin/env perl # # Copyright: Markus Benning # License: GNU GPL, http://www.gnu.org/licenses/gpl.html use strict; use warnings; use IO::File; use Geo::Gpx; use LWP::UserAgent; my $infile = shift(); my $infh = IO::File->new("<".$infile); my $gpx = Geo::Gpx->new( input => $infh ); my $ua = LWP::UserAgent->new(); $infh->close(); my $tracks = $gpx->tracks(); foreach my $track (@$tracks) { my $segments = $track->{'segments'}; foreach my $segment (@$segments) { my $points = $segment->{'points'}; my $last_ele; foreach my $point (@$points) { if(my $ele = get_ele($point)) { if($ele < 0 && defined $last_ele) { $ele = $last_ele; } $point->{'ele'} = $ele; $last_ele = $ele; } print STDERR $point->{'lat'}.', '.$point->{'lon'}.', >'.$point->{'ele'}."<\n"; } } } print $gpx->xml(); sub get_ele { my $point = shift(); my $ele; my $response = $ua->get('http://ws.geonames.org/srtm3?lat='.$point->{'lat'}.'&lng='.$point->{'lon'}); if(!$response->is_success) { warn($response->status_line); return(); } $ele = $response->content; $ele =~ s/[\r\n]+$//; return($ele); }