source: subversion/applications/utils/gary68/listrelations.pl @ 26199

Last change on this file since 26199 was 26167, checked in by gary68, 8 years ago

new listrelations version; operator and network added to output

  • Property svn:executable set to *
File size: 5.7 KB
Line 
1#
2#
3# listrelations.pl by gary68
4#
5#
6#
7# Copyright (C) 2009, Gerhard Schwanz
8#
9# This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the
10# Free Software Foundation; either version 3 of the License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>
16#
17#
18#
19# Version 1.1
20# - route info added
21# - note info added
22#
23# Version 1.2
24# - reduced view to 6 columns again
25#
26# Version 1.3
27# - added operator and network
28#
29
30
31use strict ;
32use warnings ;
33
34use File::stat ;
35use Time::localtime ; 
36
37use OSM::osm 5.3 ;
38
39my $program = "listrelations.pl" ;
40my $usage = $program . " file.osm out.htm out.csv" ;
41my $version = "1.3" ;
42
43
44my $wayId ;
45my $wayUser ;
46my @wayNodes ;
47my @wayTags ;
48my $nodeId ;
49my $nodeUser ;
50my $nodeLat ;
51my $nodeLon ;
52my @nodeTags ;
53my $aRef1 ;
54my $aRef2 ;
55
56my $relationId ;
57my $relationUser ;
58my @relationMembers ;
59my @relationTags ;
60my $placeCount = 0 ;
61
62my $relationCount = 0 ;
63my $members = 0 ;
64my @member;
65my $wayCount = 0 ; my $invalidWayCount = 0 ; my %invalidWays ;
66my $nodeCount = 0 ;
67
68my %number = () ;
69
70my $osmName ; 
71my $htmlName ; my $html ;
72my $csvName ; my $csv ;
73
74
75$osmName = shift||'';
76if (!$osmName)
77{
78        die (print $usage, "\n");
79}
80
81$htmlName = shift||'';
82if (!$htmlName)
83{
84        die (print $usage, "\n");
85}
86
87$csvName = shift||'';
88if (!$csvName)
89{
90        die (print $usage, "\n");
91}
92
93print "\n$program $version \nfor file $osmName\n\n" ;
94
95
96print "parsing relations...\n" ;
97openOsmFile ($osmName) ;
98print "- skipping nodes...\n" ;
99skipNodes() ;
100print "- skipping ways...\n" ;
101skipWays() ;
102print "- checking...\n" ;
103
104my $line = 0 ;
105
106open ($html, ">", $htmlName) || die ("Can't open html output file") ;
107open ($csv, ">", $csvName) || die ("Can't open gpx output file") ;
108
109printHTMLHeader ($html, "List of relations by Gary68") ;
110
111print $html "<H1>List of relations by Gary68</H1>\n" ;
112print $html "<p>Version ", $version, "</p>\n" ;
113print $html "<H2>Info</H2>\n" ;
114print $html "<p>", stringFileInfo ($osmName), "</p>\n" ;
115
116print $html "<H2>Data</H2>\n" ;
117printHTMLTableHead ($html) ;
118printHTMLTableHeadings ($html, "Line", "RelationId", "Type", "Name / Note", "Ref", "Operator", "Network", "#members") ;
119
120print $csv $program . " " . stringFileInfo ($osmName), "\n" ;
121print $csv "line;relationId;type;route;name;ref;operator;network;note;members\n" ;
122
123($relationId, $relationUser, $aRef1, $aRef2) = getRelation () ;
124if ($relationId != -1) {
125        @relationMembers = @$aRef1 ;
126        @relationTags = @$aRef2 ;
127}
128
129while ($relationId != -1) {
130        $line++ ;       
131        my $members = scalar (@relationMembers) ;
132
133        my $name = "-" ;
134        my $ref = "-" ;
135        my $type = "-" ;
136        my $note = "-" ;
137        my $route = "" ;
138        my $network = "-" ;
139        my $operator = "-" ;
140
141        my $i ;
142        if (scalar (@relationTags) > 0) {
143                for ($i=0; $i<scalar (@relationTags); $i++) {
144                        #print "${$relationTags[$i]}[0] = ${$relationTags[$i]}[1]\n" ;
145                        if ( ${$relationTags[$i]}[0] eq "name")  { $name  = ${$relationTags[$i]}[1] ; }
146                        if ( ${$relationTags[$i]}[0] eq "ref")   { $ref   = ${$relationTags[$i]}[1] ; }
147                        if ( ${$relationTags[$i]}[0] eq "type")  { $type  = ${$relationTags[$i]}[1] . " " . $route; }
148                        if ( ${$relationTags[$i]}[0] eq "note")  { $note  = ${$relationTags[$i]}[1] ; }
149                        if ( ${$relationTags[$i]}[0] eq "route") { $route = ${$relationTags[$i]}[1] ; }
150                        if ( ${$relationTags[$i]}[0] eq "network") { $network = ${$relationTags[$i]}[1] ; }
151                        if ( ${$relationTags[$i]}[0] eq "operator") { $operator = ${$relationTags[$i]}[1] ; }
152                }
153        }
154
155        if (defined $number{$type}) {
156                $number{$type}++ ;
157        }
158        else {
159                $number{$type} = 1 ;
160        }
161
162        printHTMLRowStart ($html) ;
163        printHTMLCellLeft ($html, $line) ;
164        printHTMLCellLeft ($html, historyLink ("relation", $relationId) . "(osm)&nbsp;" . analyzerLink ($relationId) . "(analyzer)" ) ;
165        printHTMLCellLeft ($html, $type) ;
166        if($note eq "-") {
167                printHTMLCellLeft ($html, $name);
168        }
169        elsif($name eq "-") {
170                printHTMLCellLeftEM ($html, $note);
171        }
172        else {
173                printHTMLCellLeftTwoValues ($html, $name, $note) ;
174        }
175        printHTMLCellLeft ($html, $ref) ;
176        printHTMLCellLeft ($html, $operator) ;
177        printHTMLCellLeft ($html, $network) ;
178        printHTMLCellLeft ($html, $members) ;
179        printHTMLRowEnd ($html) ;
180       
181        print $csv $line, ";" ; 
182        print $csv $relationId, ";" ; 
183        print $csv $type, ";" ; 
184        print $csv $route, ";" ; 
185        print $csv "\"", $name,  "\"", ";" ; 
186        print $csv "\"", $ref,  "\"",  ";" ; 
187        print $csv "\"", $operator,  "\"",  ";" ; 
188        print $csv "\"", $network,  "\"",  ";" ; 
189        print $csv "\"", $note,  "\"",  ";" ; 
190        print $csv $members, "\n" ; 
191
192        #next
193        ($relationId, $relationUser, $aRef1, $aRef2) = getRelation () ;
194        if ($relationId != -1) {
195                @relationMembers = @$aRef1 ;
196                @relationTags = @$aRef2 ;
197        }
198}
199
200printHTMLTableFoot ($html) ;
201
202print $html "<h2>Statistics</h2>" ;
203printHTMLTableHead ($html) ;
204printHTMLTableHeadings ($html, "Type", "Number") ;
205
206my $key ;
207foreach $key (sort keys %number) {
208        printHTMLRowStart ($html) ;
209        printHTMLCellLeft ($html, $key) ;
210        printHTMLCellLeft ($html, $number{$key}) ;
211        printHTMLRowEnd ($html) ;
212}
213printHTMLTableFoot ($html) ;
214
215
216printHTMLFoot ($html) ;
217
218closeOsmFile () ;
219
220close ($html) ;
221close ($csv) ;
222
223print "\n$line relations found and listed.\n";
224print "\n$program finished.\n";
225
226
Note: See TracBrowser for help on using the repository browser.