source: subversion/utils/osm/osm2singleline_per_rag.pl @ 2026

Last change on this file since 2026 was 1787, checked in by joerg, 13 years ago

initial Version

  • Property svn:executable set to *
File size: 2.8 KB
Line 
1#!/usr/bin/perl
2# This Script filters OSM Files so they can be processed by grep, ..
3#
4# Joerg Ostertag <openstreetmap@ostertag.name>
5
6use strict;
7use warnings;
8
9my ($verbose,$debug);
10
11use Data::Dumper;
12
13##################################################################
14package File;
15##################################################################
16
17use IO::File;
18
19# -----------------------------------------------------------------------------
20# Open Data File in predefined Directories
21sub data_open($){
22    my $file_name = shift;
23
24    my $file_with_path="$file_name";
25    my $size = (-s $file_with_path)||0;
26    if ( $size < 270 ) {
27        warn "cannot Open $file_name ($size) Bytes is too small)\n"
28            if $verbose || $debug;
29        return 0;
30    }
31
32    print "Opening $file_with_path" if $debug;
33    my $fh;
34    if ( $file_with_path =~ m/\.gz$/ ) {
35        $fh = IO::File->new("gzip -dc $file_with_path|")
36            or die("cannot open $file_with_path: $!");
37    } elsif ( $file_with_path =~ m/\.bz2$/ ) {
38            $fh = IO::File->new("bzip2 -dc $file_with_path|")
39                or die("cannot open $file_with_path: $!");
40        } else {
41            $fh = IO::File->new("<$file_with_path")
42                or die("cannot open $file_with_path: $!");
43        }
44    return $fh;
45}
46
47##################################################################
48package Main;
49##################################################################
50use IO::File;
51
52if ( @ARGV < 1 ){
53    print "Need Filename(s) to convert\n";
54    exit 1;
55}
56
57my $start_time=time();
58   
59my $count=0;
60while ( my $file_name = shift @ARGV ) {
61    my $out_file_name=$file_name;
62
63    # Only process .osm Files for now
64    next unless ( $out_file_name=~s/\.osm/-single-line.osm/);
65
66    $count ++;
67
68    print "Converting $file_name --> $out_file_name\n";
69    my $fh = File::data_open($file_name);
70    my $fo = IO::File->new(">$out_file_name");
71    my $mode ='';
72    my $line ='';
73    while ( my $new_line = $fh->getline() ) {
74        chomp $new_line;
75        $line .= $new_line;
76        if ( $new_line =~m/^\s*<(\D+) id=/ ) {
77            $mode = $1 unless $1 eq "seg";
78        }
79        if ( $mode eq "node" ) {
80            if ( ( $new_line =~ m,</node>, ) ||
81                 ( $new_line =~ m,<node [^>]*/>, ) ) {
82                print $fo "$line\n";
83                #print "$mode: $line\n";
84                $line ='';
85            }
86        } elsif ( $mode eq "segment" ) {
87            if ( ( $new_line =~ m,</segment>, ) ||
88                 ( $new_line =~ m,<segment [^>]*/>, ) ) {
89                print $fo "$line\n";
90                #print "$mode: $line\n";
91                $line ='';
92            }
93        } elsif ( $mode eq "way" ) {
94            if ( ( $new_line =~ m,</way>, ) ||
95                 ( $new_line =~ m,<way [^>]*/>, ) ) {
96                print $fo "$line\n";
97                #print "$mode: $line\n";
98                $line ='';
99            }
100        } else {
101            #print "$mode: $line\n";
102            print $fo "$line\n";
103            $line ='';
104        }           
105    }
106    print $fo "$line\n";
107    $fo->close();
108    $fh->close();
109}
110if ( $verbose) {
111    printf "Converting $count  OSM Files in  %.0f sec\n",time()-$start_time;
112}
Note: See TracBrowser for help on using the repository browser.