source: subversion/applications/utils/gary68/errors.pl @ 24628

Last change on this file since 24628 was 24628, checked in by gary68, 9 years ago

new errors version: umlaute and replace alt and neu

  • Property svn:executable set to *
File size: 3.4 KB
Line 
1
2
3
4# errors.pl
5
6
7use strict ;
8use warnings ;
9
10use OSM::osm ;
11
12my $version = 1.2 ;
13
14my @allowedREF = qw (motorway motorway_link trunk trunk_link primary primary_link secondary secondary_link tertiary unclassified) ;
15my %allowedREFHash = () ;
16foreach my $a (@allowedREF) { $allowedREFHash{$a} = 1 ; }
17
18my %users  ;
19
20
21#$users{""} = 1 ;
22
23
24my $fileName ;
25my $txtFileName ;
26
27
28# read data from file
29my $wayId ;
30my $wayUser ;
31my @wayNodes ;
32my @wayTags ;
33my $nodeId ;
34my $nodeUser ;
35my $nodeLat ;
36my $nodeLon ;
37my @nodeTags ;
38my $aRef1 ;
39my $aRef2 ;
40my $relationId ;
41my $relationUser ;
42my @relationTags ;
43my @relationMembers ;
44
45my $txtFile ;
46
47my $line = 0 ;
48my $problems = 0 ;
49
50$fileName = shift ;
51$txtFileName = shift ;
52
53
54
55open ($txtFile, ">", $txtFileName) ;
56
57
58
59
60print "reading osm file...\n" ;
61print "  - nodes\n" ;
62
63openOsmFile ($fileName) ;
64
65skipNodes() ;
66
67
68
69print "  - ways\n" ;
70
71($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
72if ($wayId != -1) {
73        @wayNodes = @$aRef1 ;
74        @wayTags = @$aRef2 ;
75}
76while ($wayId != -1) {
77
78        if (! defined $wayUser) {
79                print "user undefined\n" ;
80                $wayUser = "unknown" ;
81        }
82
83        if ($wayUser eq "") {
84                print "user empty\n" ;
85                $wayUser = "unknown" ;
86        }
87
88#       if (defined $users{$wayUser}) {
89
90                my $ref ; my $refPresent = 0 ; my $refUsed = "" ; my $highway = 0 ; my $invalidRefPresent = 0 ;
91                foreach my $t (@wayTags) {
92                        if ( ($t->[0] eq "highway") and (defined $allowedREFHash{$t->[1]}) ) { $highway = 1 ; }
93                        if ($t->[0] eq "ref") {
94                                $refPresent = 1 ;
95                                $refUsed = $t->[1] ;
96                                $refUsed =~ s/neu//ig ;
97                                $refUsed =~ s/alt//ig ;
98                                my @refs ;
99                                if (grep /;/, $refUsed) { 
100                                        @refs = split /;/, $refUsed ; 
101                                }
102                                else {
103                                        if (grep /,/, $refUsed) { @refs = split /,/, $refUsed ; }
104                                        else {
105                                                if (grep /\//, $refUsed) { @refs = split /\//, $refUsed ; }
106                                                else {
107                                                        @refs = ($refUsed) ;
108                                                }
109
110                                        }
111                                }
112                                foreach my $r (@refs) {
113                                        ($ref) = ( $r =~ /^(\s*[a-zäöüÄÖÜ]+\s*[0-9]+\s*[a-z]?\s*)$/i ) ;
114                                        if (!defined $ref) { $invalidRefPresent = 1 ; }
115                                }
116                        }
117                }
118                if ($refPresent and ($invalidRefPresent) and $highway) {
119                        $problems++ ;
120                        writeFile ("way", $wayId, $wayUser, "UNCOMMON REF: $refUsed", $problems) ;
121                }
122
123#       }
124       
125        ($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
126        if ($wayId != -1) {
127                @wayNodes = @$aRef1 ;
128                @wayTags = @$aRef2 ;
129        }
130}
131
132print "problems found: $problems\n" ;
133
134closeOsmFile () ;
135
136close ($txtFile) ;
137
138
139# -----------------------------------------------------
140
141sub writeFile {
142        my ($object, $id, $user, $comment, $line) = @_ ;
143        print $txtFile "$object,$id,$user,$comment          ,$line\n" ;
144}
145
146sub compareTags {
147        my ($ref1, $ref2) = @_ ;
148        my @tags1 = @$ref1 ;
149        my @tags2 = @$ref2 ;
150        my %t1 = () ; my %t2 = () ;
151
152        my $changed = 0 ;
153        my $changes = "" ;
154
155        foreach my $tag (@tags1) { $t1{$tag->[0]} = $tag->[1] ; }
156        foreach my $tag (@tags2) { $t2{$tag->[0]} = $tag->[1] ; }
157
158        foreach my $t (keys %t1) {
159                if (!defined $t2{$t}) {
160                        # deleted tag
161                        $changes .= "DELETED TAG $t:$t1{$t} " ;
162                        $changed = 1 ;
163                }
164                else {
165                        if ($t1{$t} ne $t2{$t}) {
166                                # changed
167                                $changes .= "CHANGED TAG $t: $t1{$t} -> $t2{$t} " ;
168                                $changed = 1 ;
169                        }
170                }
171        }
172       
173        foreach my $t (keys %t2) {
174                if (!defined $t1{$t}) {
175                        # new tag
176                        $changes .= "NEW TAG $t:$t2{$t} " ;
177                        $changed = 1 ;
178                }
179        }
180
181        return ($changed, $changes) ;
182}
Note: See TracBrowser for help on using the repository browser.