summaryrefslogtreecommitdiff
path: root/navit/tools
diff options
context:
space:
mode:
authorsingesang <singesang@ffa7fe5e-494d-0410-b361-a75ebd5db220>2008-12-15 12:40:26 +0000
committersingesang <singesang@ffa7fe5e-494d-0410-b361-a75ebd5db220>2008-12-15 12:40:26 +0000
commitce713fa5fb64373b2f6e7b02bb7a47ca4f3e4fe9 (patch)
tree454fe2fb3befa37163e267f58f63253f77c21278 /navit/tools
parent996f9fdcbd3766c56a03dfb4ccc5f0be50e5591e (diff)
downloadnavit-ce713fa5fb64373b2f6e7b02bb7a47ca4f3e4fe9.tar.gz
Add:Tools: Added a perl script to convert one (or multiple) .asc-file(s) (mainly used by poiwarner) into one navit map file (or osm if needed). Needs osm2navit
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@1794 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/tools')
-rwxr-xr-xnavit/tools/asc2navit135
1 files changed, 135 insertions, 0 deletions
diff --git a/navit/tools/asc2navit b/navit/tools/asc2navit
new file mode 100755
index 000000000..dadef0108
--- /dev/null
+++ b/navit/tools/asc2navit
@@ -0,0 +1,135 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Getopt::Long qw(:config permute);
+use Data::Dumper;
+use Benchmark;
+
+sub show_help;
+sub preprocess_filelist;
+sub open_outputhandle;
+sub process_file;
+sub run;
+
+my $amenity = "point_unkn";
+my $write_osm = 0;
+my %files = ();
+my $filename = "onebigfile";
+my $poicount = 0;
+
+
+GetOptions ('a|amenity=s' => \$amenity,
+ 'x|write-osm!' => \$write_osm,
+ 'h|?|help!' => \&show_help,
+ 'O|output-file=s' => \$filename,
+ '<>' => \&preprocess_filelist);
+
+
+# when no file is given...
+show_help() if (keys %files == 0);
+
+# determine filename
+determine_filename();
+
+# open the pipe for the output...
+my $pipe = open_outputhandle();
+
+# ...feed the pipe...
+run();
+
+# ...and close it properly
+close $pipe;
+
+###############################################################################
+###############################################################################
+###############################################################################
+
+sub show_help {
+ print "parses one (or multiple) .asc-file(s) (mainly used by poiwarner) and\n";
+ print "merges the result into one navit binary mapfile. requires osm2navit (when -x is not set)\n";
+ print "usage: $0 [OPTION] OUT in1.asc [in2.asc [...]]\n";
+ print " creates one big file called onebigfile\n";
+ print "usage: $0 [OPTION] IN.asc\n";
+ print " creates a file called IN.asc.bin / .osm\n\n";
+ print " -h, --help shows this help\n";
+ print " -x, --write-osm write in osm's xml format instead of navit's\n";
+ print " -a, --amenity=NAME sets the amenity to NAME. default is point_unk\n";
+ print " you can use -a several times for different types of pois\n";
+ print " e.g.: $0 -a tec_common speedcamdb1 speedcamdb2 -a poi_biergarten boozestation1 boozestation2\n";
+ print " -O, --output-file=OUT write the output to OUT. default for multiple files ist onebigfile\n";
+ exit 0;
+}
+
+sub preprocess_filelist {
+ my ($filename) = @_;
+ push (@{$files{$amenity}}, @_);
+
+}
+
+sub open_outputhandle() {
+ # open the pipe to osm2navit...
+ if (!$write_osm) {
+ open $pipe, "| osm2navit $filename" or die $!;
+ } else {
+ # or a filehandle
+ open $pipe, ">$filename" or die $!;
+ }
+ return $pipe;
+}
+
+sub process_file {
+ my ($file) = @_;
+ my $filehandle;
+ print "$0 processing $file...\n";
+ open ($filehandle, "<$file") or next $!;
+ # for every line in the file...
+ while (<$filehandle>) {
+ # ...check if it's a valid record...
+ m/([0-9\.\-]*), ([0-9\.\-]*), "\[([0-9]*).*/ or next;
+ my ($lon, $lat, $id) = ($1, $2, $3);
+ # ...and write it into the handle then
+ print $pipe " <node id=\"-$id\" visible=\"true\" lon=\"$lon\" lat=\"$lat\">\n";
+ print $pipe " <tag k=\"name\" v=\"\" />\n";
+ print $pipe " <tag k=\"amenity\" v=\"$amenity\" />\n";
+ print $pipe " </node>\n";
+ $poicount++;
+ }
+}
+
+sub determine_filename {
+ my $filecount = 0;
+ foreach my $amenity (keys %files) {
+ $filecount += $#{$files{$amenity}} + 1;
+ }
+
+ # when it's only one file and no output file has been given...
+ if ($filecount == 1 && $filename eq "") {
+ my $onefile = $files{(keys %files)[0]}[0];
+ # ...generate a new one from the given filename
+ $filename = "$onefile.bin";
+ $filename = "$onefile.xml" if ($write_osm);
+ }
+
+ print "$0 writing output to $filename\n";
+}
+
+sub run {
+ # write osm header
+ print $pipe '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+ print $pipe '<osm version="0.5">' . "\n";
+
+ # set the amenity and
+ my @amenities = keys %files;
+ while (my $amenity = shift @amenities) {
+ foreach my $file (@{$files{$amenity}}) {
+ process_file($file);
+ }
+ }
+
+ # close the osm file
+ print $pipe '</osm>';
+ # and show up some stats
+ print "$0 processed $poicount poi's\n";
+}
+