Skip to content

Commit d3a39d2

Browse files
committed
osmrel2gpx: --title option (with tests)
1 parent 93cc13a commit d3a39d2

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

miscsrc/osmrel2gpx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,20 @@ use warnings;
44
use FindBin;
55
use lib ("$FindBin::RealBin/..", "$FindBin::RealBin/../lib");
66

7+
use Encode qw(decode);
8+
use I18N::Langinfo qw(langinfo CODESET);
79
use LWP::UserAgent;
810
use XML::LibXML;
911
use Getopt::Long;
1012
use List::Util qw(min);
1113
use POSIX qw(strftime);
1214

15+
my $codeset = langinfo(CODESET());
16+
$codeset = lc $codeset; # 'UTF-8' is not recognized by emacs, but 'utf-8' is
17+
binmode STDERR, ":encoding($codeset)";
18+
1319
# Command line args
14-
my ($relation_id, $start_coord, $end_coord, $output, $backward, $cache, $in_xml);
20+
my ($relation_id, $start_coord, $end_coord, $output, $backward, $cache, $in_xml, $title);
1521
GetOptions(
1622
'id=i' => \$relation_id,
1723
'start=s' => \$start_coord,
@@ -21,9 +27,16 @@ GetOptions(
2127
'cache!' => \$cache,
2228
'in-xml=s' => \$in_xml,
2329
'simplify=i' => \my $simplify,
30+
'title=s' => \$title,
2431
) or die "Usage: $0 --id RELATION_ID [--start lon,lat] [--end lon,lat] [--out file.gpx] [--backward] [--cache] [--in-xml /path/to/overpassresult.xml] [--simplify number]\n";
2532
die "OSM relation ID required" unless $relation_id;
2633

34+
for ($title) {
35+
if (defined $_) {
36+
$_ = decode($codeset, $_);
37+
}
38+
}
39+
2740
# API query (default: Overpass)
2841
my $overpass_url = "https://overpass-api.de/api/interpreter";
2942
my $query = <<EOF;
@@ -226,12 +239,14 @@ if (defined $simplify && @lonlats > $simplify) {
226239
}
227240
@lonlats = map { [$_->{x}, $_->{y}] } @lonlats;
228241

242+
$title = $relation_name if !defined $title;
243+
229244
# Generate GPX
230245
my $gpx = <<EOH;
231246
<?xml version="1.0" encoding="UTF-8"?>
232247
<gpx version="1.1" creator="rel2gpx.pl" xmlns="http://www.topografix.com/GPX/1/1">
233248
<trk>
234-
<name>@{[ XML::LibXML::Text->new($relation_name)->toString ]}</name>
249+
<name>@{[ XML::LibXML::Text->new($title)->toString ]}</name>
235250
<trkseg>
236251
EOH
237252

t/osmrel2gpx.t

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use FindBin;
1111
use lib $FindBin::RealBin, "$FindBin::RealBin/..";
1212
use utf8;
1313

14+
use Encode qw(decode);
1415
use Getopt::Long;
1516
use Test::More;
1617

@@ -49,17 +50,17 @@ my $osmrel2gpx = bbbike_root . '/miscsrc/osmrel2gpx';
4950
no warnings 'qw';
5051
for my $test_case (
5152
[ 9030, undef, 'Berliner Mauerweg', '13.3114700,52.6275917', undef], # XXX incomplete track, relation member problems around Oberbaumbrücke
52-
[ 335268, undef, 'Spreeradweg [Beeskow-Berlin]', '14.2486957,52.1753471', undef], # XXX incomplete track, relation member problems around Oberbaumbrücke
53-
[ 27727, undef, 'Berlin-Usedom', '13.400738,52.516311', '13.772893,54.135781'],
54-
[2262839, undef, 'Oder-Neiße-Radweg [MV]', '14.1912112,53.9332517', '14.2619276,53.2766402'],
55-
[2262515, undef, 'Oder-Neiße-Radweg [BRB]', '14.2619276,53.2766402', '14.7317531,51.5873829'],
53+
[ 335268, undef, 'Spreeradweg [BeeskowBerlin]', '14.2486957,52.1753471', undef], # XXX incomplete track, relation member problems around Oberbaumbrücke
54+
[ 27727, undef, 'Berlin-Usedom Radweg', '13.400738,52.516311', '13.772893,54.135781'],
55+
[2262839, undef, '[D12] Oder-Neiße-Radweg MVP', '14.1912112,53.9332517', '14.2619276,53.2766402'],
56+
[2262515, undef, '[D12] Oder-Neiße-Radweg Brandenburg', '14.2619276,53.2766402', '14.7317531,51.5873829'],
5657
[1069748, undef, 'Uckermärkischer Radrundweg', '13.9994783,53.0150285', '13.9994783,53.0150285'], # start/end in Angermünde
57-
[4784783, undef, 'Elberadweg [Tangermünde-Magdeburg]', '11.973961,52.542651', '11.642163,52.129183'],
58-
[ 27727, [qw(--start 13.593313,52.677276)], 'Berlin-Usedom (start in Bernau)', '13.593313,52.677276', '13.772893,54.135781'],
59-
[ 27727, [qw(--end 13.861763,53.313792)], 'Berlin-Usedom (end in Prenzlau)', '13.400738,52.516311', '13.861763,53.313792'],
60-
[ 27727, [qw(--start 13.593313,52.677276 --end 13.861763,53.313792)], 'Berlin-Usedom (Bernau-Prenzlau)', '13.593313,52.677276', '13.861763,53.313792'],
61-
[ 27727, [qw(--backward)], 'Usedom-Berlin', '13.772893,54.135781', '13.400738,52.516311'],
62-
[ 27727, [qw(--backward --start 13.861763,53.313792 --end 13.593313,52.677276)], 'Usedom-Berlin (Prenzlau-Bernau)', '13.861763,53.313792', '13.593313,52.677276'],
58+
[4784783, undef, '[D10] Elberadweg linkselbisch überwiegend [Abschnitt I]', '11.973961,52.542651', '11.642163,52.129183'],
59+
[ 27727, [qw(--start 13.593313,52.677276 --title), 'Berlin-Usedom (start in Bernau)'], 'Berlin-Usedom (start in Bernau)', '13.593313,52.677276', '13.772893,54.135781'],
60+
[ 27727, [qw(--end 13.861763,53.313792 --title), 'Berlin-Usedom (end in Prenzlau)'], 'Berlin-Usedom (end in Prenzlau)', '13.400738,52.516311', '13.861763,53.313792'],
61+
[ 27727, [qw(--start 13.593313,52.677276 --end 13.861763,53.313792 --title), 'Berlin-Usedom (Bernau-Prenzlau)'], 'Berlin-Usedom (Bernau-Prenzlau)', '13.593313,52.677276', '13.861763,53.313792'],
62+
[ 27727, [qw(--backward --title), 'Usedom-Berlin'], 'Usedom-Berlin', '13.772893,54.135781', '13.400738,52.516311'],
63+
[ 27727, [qw(--backward --start 13.861763,53.313792 --end 13.593313,52.677276 --title), 'Usedom-Berlin (Prenzlau-Bernau)'], 'Usedom-Berlin (Prenzlau-Bernau)', '13.861763,53.313792', '13.593313,52.677276'],
6364
) {
6465
my($rel_id, $extra_args, $name, $exp_start_coord, $exp_end_coord) = @$test_case;
6566
my $cache_file = "/tmp/osmrel2gpx_response_${rel_id}.xml";
@@ -74,6 +75,7 @@ for my $test_case (
7475
print $ofh $out;
7576
close $ofh or die $!;
7677
}
78+
$out = decode("utf-8", $out);
7779
my($first_lat, $first_lon) = $out =~ m{<trkpt lat="([^"]+)" lon="([^"]+)"};
7880
my($last_lat, $last_lon) = $out =~ m{.*<trkpt lat="([^"]+)" lon="([^"]+)"}s;
7981
if (defined $exp_start_coord) {
@@ -84,6 +86,8 @@ for my $test_case (
8486
my $end_dist = Strassen::Util::strecke_s_polar($exp_end_coord, "$last_lon,$last_lat");
8587
cmp_ok $end_dist, "<=", 1000, "expected end coord within 1000m from $exp_end_coord, got $last_lon,$last_lat (dist is $end_dist)";
8688
}
89+
my($trkname) = $out =~ m{<name>(.*?)</name>};
90+
is $trkname, $name, "expected trkname";
8791
}
8892

8993
__END__

0 commit comments

Comments
 (0)