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

Last change on this file since 24893 was 18270, checked in by gary68, 10 years ago

new version of listrelations, 6 column format

  • Property svn:executable set to *
File size: 5.2 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
27
28use strict ;
29use warnings ;
30
31use File::stat ;
32use Time::localtime ; 
33
34use OSM::osm 5.3 ;
35
36my $program = "listrelations.pl" ;
37my $usage = $program . " file.osm out.htm out.csv" ;
38my $version = "1.2" ;
39
40
41my $wayId ;
42my $wayUser ;
43my @wayNodes ;
44my @wayTags ;
45my $nodeId ;
46my $nodeUser ;
47my $nodeLat ;
48my $nodeLon ;
49my @nodeTags ;
50my $aRef1 ;
51my $aRef2 ;
52
53my $relationId ;
54my $relationUser ;
55my @relationMembers ;
56my @relationTags ;
57my $placeCount = 0 ;
58
59my $relationCount = 0 ;
60my $members = 0 ;
61my @member;
62my $wayCount = 0 ; my $invalidWayCount = 0 ; my %invalidWays ;
63my $nodeCount = 0 ;
64
65my %number = () ;
66
67my $osmName ; 
68my $htmlName ; my $html ;
69my $csvName ; my $csv ;
70
71
72$osmName = shift||'';
73if (!$osmName)
74{
75        die (print $usage, "\n");
76}
77
78$htmlName = shift||'';
79if (!$htmlName)
80{
81        die (print $usage, "\n");
82}
83
84$csvName = shift||'';
85if (!$csvName)
86{
87        die (print $usage, "\n");
88}
89
90print "\n$program $version \nfor file $osmName\n\n" ;
91
92
93print "parsing relations...\n" ;
94openOsmFile ($osmName) ;
95print "- skipping nodes...\n" ;
96skipNodes() ;
97print "- skipping ways...\n" ;
98skipWays() ;
99print "- checking...\n" ;
100
101my $line = 0 ;
102
103open ($html, ">", $htmlName) || die ("Can't open html output file") ;
104open ($csv, ">", $csvName) || die ("Can't open gpx output file") ;
105
106printHTMLHeader ($html, "List of relations by Gary68") ;
107
108print $html "<H1>List of relations by Gary68</H1>\n" ;
109print $html "<p>Version ", $version, "</p>\n" ;
110print $html "<H2>Info</H2>\n" ;
111print $html "<p>", stringFileInfo ($osmName), "</p>\n" ;
112
113print $html "<H2>Data</H2>\n" ;
114printHTMLTableHead ($html) ;
115printHTMLTableHeadings ($html, "Line", "RelationId", "Type", "Name / Note", "Ref", "#members") ;
116
117print $csv $program . " " . stringFileInfo ($osmName), "\n" ;
118print $csv "line;relationId;type;route;name;ref;note;members\n" ;
119
120($relationId, $relationUser, $aRef1, $aRef2) = getRelation () ;
121if ($relationId != -1) {
122        @relationMembers = @$aRef1 ;
123        @relationTags = @$aRef2 ;
124}
125
126while ($relationId != -1) {
127        $line++ ;       
128        my $members = scalar (@relationMembers) ;
129
130        my $name = "-" ;
131        my $ref = "-" ;
132        my $type = "-" ;
133        my $note = "-" ;
134        my $route = "" ;
135
136        my $i ;
137        if (scalar (@relationTags) > 0) {
138                for ($i=0; $i<scalar (@relationTags); $i++) {
139                        #print "${$relationTags[$i]}[0] = ${$relationTags[$i]}[1]\n" ;
140                        if ( ${$relationTags[$i]}[0] eq "name")  { $name  = ${$relationTags[$i]}[1] ; }
141                        if ( ${$relationTags[$i]}[0] eq "ref")   { $ref   = ${$relationTags[$i]}[1] ; }
142                        if ( ${$relationTags[$i]}[0] eq "type")  { $type  = ${$relationTags[$i]}[1] . " " . $route; }
143                        if ( ${$relationTags[$i]}[0] eq "note")  { $note  = ${$relationTags[$i]}[1] ; }
144                        if ( ${$relationTags[$i]}[0] eq "route") { $route = ${$relationTags[$i]}[1] ; }
145                }
146        }
147
148        if (defined $number{$type}) {
149                $number{$type}++ ;
150        }
151        else {
152                $number{$type} = 1 ;
153        }
154
155        printHTMLRowStart ($html) ;
156        printHTMLCellLeft ($html, $line) ;
157        printHTMLCellLeft ($html, historyLink ("relation", $relationId) . "(osm)&nbsp;" . analyzerLink ($relationId) . "(analyzer)" ) ;
158        printHTMLCellLeft ($html, $type) ;
159        if($note eq "-") {
160                printHTMLCellLeft ($html, $name);
161        }
162        elsif($name eq "-") {
163                printHTMLCellLeftEM ($html, $note);
164        }
165        else {
166                printHTMLCellLeftTwoValues ($html, $name, $note) ;
167        }
168        printHTMLCellLeft ($html, $ref) ;
169        printHTMLCellLeft ($html, $members) ;
170        printHTMLRowEnd ($html) ;
171       
172        print $csv $line, ";" ; 
173        print $csv $relationId, ";" ; 
174        print $csv $type, ";" ; 
175        print $csv $route, ";" ; 
176        print $csv "\"", $name,  "\"", ";" ; 
177        print $csv "\"", $ref,  "\"",  ";" ; 
178        print $csv "\"", $note,  "\"",  ";" ; 
179        print $csv $members, "\n" ; 
180
181        #next
182        ($relationId, $relationUser, $aRef1, $aRef2) = getRelation () ;
183        if ($relationId != -1) {
184                @relationMembers = @$aRef1 ;
185                @relationTags = @$aRef2 ;
186        }
187}
188
189printHTMLTableFoot ($html) ;
190
191print $html "<h2>Statistics</h2>" ;
192printHTMLTableHead ($html) ;
193printHTMLTableHeadings ($html, "Type", "Number") ;
194
195my $key ;
196foreach $key (sort keys %number) {
197        printHTMLRowStart ($html) ;
198        printHTMLCellLeft ($html, $key) ;
199        printHTMLCellLeft ($html, $number{$key}) ;
200        printHTMLRowEnd ($html) ;
201}
202printHTMLTableFoot ($html) ;
203
204
205printHTMLFoot ($html) ;
206
207closeOsmFile () ;
208
209close ($html) ;
210close ($csv) ;
211
212print "\n$line relations found and listed.\n";
213print "\n$program finished.\n";
214
215
Note: See TracBrowser for help on using the repository browser.