source: subversion/applications/utils/gary68/checklayer.pl @ 34621

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

new program checklayer

  • Property svn:executable set to *
File size: 5.6 KB
Line 
1#
2#
3# checklayer.pl by gary68
4#
5#
6#
7# Copyright (C) 2011, 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# Version 1.0
19#
20#
21
22use strict ;
23use warnings ;
24
25use OSM::osm 5.1 ;
26use File::stat;
27use Time::localtime;
28
29
30my $program = "checklayer.pl" ;
31my $usage = $program . " file.osm out.htm" ;
32my $version = "1.0" ;
33my @types = qw (motorway motorway_link trunk trunk_link primary primary_link secondary secondary_link tertiary road unclassified residential) ;
34
35my $wayId ; 
36my $wayUser ; my @wayNodes ; my @wayTags ;
37my $nodeId ; 
38my $nodeUser ; my $nodeLat ; my $nodeLon ; my @nodeTags ;
39my $aRef1 ; my $aRef2 ;
40
41my %layers = () ;
42my %problems = () ;
43
44my $time0 = time() ; my $time1 ; my $timeA ;
45
46my $html ;
47my $gpx ;
48my $osmName ;
49my $htmlName ;
50my $gpxName ;
51
52my %lon ; my %lat ;
53
54###############
55# get parameter
56###############
57$osmName = shift||'';
58if (!$osmName)
59{
60        die (print $usage, "\n");
61}
62
63$htmlName = shift||'';
64if (!$htmlName)
65{
66        die (print $usage, "\n");
67}
68
69$gpxName = $htmlName ;
70$gpxName =~ s/htm/gpx/ ;
71
72print "\n$program $version for file $osmName\n\n" ;
73
74
75
76
77######################
78# skip all nodes first
79######################
80openOsmFile ($osmName) ;
81print "pass1: skipping nodes...\n" ;
82skipNodes () ;
83
84
85print "pass1: reading ways...\n" ;
86($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
87if ($wayId != -1) {
88        @wayNodes = @$aRef1 ;
89        @wayTags = @$aRef2 ;
90}
91while ($wayId != -1) { 
92
93        my $use = 0 ;
94        my $layer = 0 ;
95        foreach my $tag (@wayTags) {
96                if ($tag->[0] eq "highway") {
97                        foreach my $type (@types) {
98                                if ($type eq $tag->[1]) {
99                                        $use = 1 ;
100                                }
101                        }
102                }
103                if ($tag->[0] eq "layer") {
104                        $layer = $tag->[1] ;
105                }
106        } 
107
108        if ($layer =~ /^([+-]?\d+)$/) {
109        }
110        else {
111                print "way $wayId: layer $layer not numeric. will be set to 0.\n" ;
112                $layer = 0 ;
113        }
114
115        if ( ($use) and (scalar @wayNodes > 2) ) {
116                for (my $i = 1; $i < $#wayNodes; $i++) {
117                        if (defined $layers { $wayNodes[$i] } ) {
118                                if ( $layers { $wayNodes[$i] } != $layer) {
119                                        $problems { $wayNodes[$i] } = 1 ;
120                                }
121                        }
122                        else {
123                                $layers { $wayNodes[$i] } = $layer ;
124                        }
125                }
126        }
127
128        # next way
129        ($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
130        if ($wayId != -1) {
131                @wayNodes = @$aRef1 ;
132                @wayTags = @$aRef2 ;
133        }
134}
135
136closeOsmFile () ;
137
138
139print scalar keys %problems, " problems found.\n" ;
140
141######################
142# get node information
143######################
144
145if (scalar keys %problems > 0) {
146        print "pass2: get node information...\n" ;
147        openOsmFile ($osmName) ;
148
149        ($nodeId, $nodeLon, $nodeLat, $nodeUser, $aRef1) = getNode2 () ;
150        if ($nodeId != -1) {
151                #@nodeTags = @$aRef1 ;
152        }
153
154        while ($nodeId != -1) {
155
156                if (defined $problems{$nodeId}) {
157                        $lon{$nodeId} = $nodeLon ;
158                        $lat{$nodeId} = $nodeLat ;
159                }
160
161                # next
162                ($nodeId, $nodeLon, $nodeLat, $nodeUser, $aRef1) = getNode2 () ;
163                if ($nodeId != -1) {
164                        #@nodeTags = @$aRef1 ;
165                }
166        }
167
168        closeOsmFile () ;
169
170}
171
172
173
174
175$time1 = time () ;
176
177
178##################
179# PRINT HTML INFOS
180##################
181open ($html, ">", $htmlName) || die ("Can't open html output file") ;
182open ($gpx, ">", $gpxName) || die ("Can't open gpx output file") ;
183
184
185printHTMLiFrameHeader ($html, "Layer Check by Gary68") ;
186printGPXHeader ($gpx) ;
187
188print $html "<H1>Layer Check by Gary68</H1>\n" ;
189print $html "<p>Version ", $version, "</p>\n" ;
190print $html "<H2>Statistics</H2>\n" ;
191print $html "<p>", stringFileInfo ($osmName), "<br>\n" ;
192
193print $html "<H2>Layer problems found</H2>\n" ;
194print $html "<p>At the given location two ways (with different layer value) do intersect WITH a common node." ;
195print $html "<table border=\"1\">\n";
196print $html "<tr>\n" ;
197print $html "<th>Line</th>\n" ;
198print $html "<th>NodeId</th>\n" ;
199print $html "<th>Links</th>\n" ;
200print $html "<th>JOSM</th>\n" ;
201print $html "<th>Pic</th>\n" ;
202print $html "</tr>\n" ;
203
204my $i = 0 ;
205
206foreach my $node (keys %problems) {
207        $i++ ;
208        # HTML
209        print $html "<tr>\n" ;
210        print $html "<td>", $i , "</td>\n" ;
211        print $html "<td>", historyLink ("node", $node), "</td>\n" ;
212        print $html "<td>", osmLink ($lon{$node}, $lat{$node}, 16) , "<br>\n" ;
213        print $html osbLink ($lon{$node}, $lat{$node}, 16) , "<br>\n" ;
214        print $html mapCompareLink ($lon{$node}, $lat{$node}, 16) , "</td>\n" ;
215        print $html "<td>", josmLinkSelectNode ($lon{$node}, $lat{$node}, 0.01, $node), "</td>\n" ;
216        print $html "<td>", picLinkOsmarender ($lon{$node}, $lat{$node}, 16), "</td>\n" ;
217        print $html "</tr>\n" ;
218
219        # GPX
220        my $text = "Layer Check - " . $node  . " ways w. different layer share same node" ;
221        printGPXWaypoint ($gpx, $lon{$node}, $lat{$node}, $text) ;
222}
223print $html "</table>\n" ;
224print $html "<p>$i lines total</p>\n" ;
225
226
227
228########
229# FINISH
230########
231print $html "<p>", stringTimeSpent ($time1-$time0), "</p>\n" ;
232printHTMLFoot ($html) ;
233printGPXFoot ($gpx) ;
234
235close ($html) ;
236close ($gpx) ;
237
238
239print "\n$program finished after ", stringTimeSpent ($time1-$time0), "\n\n" ;
240
241print "$i lines total\n\n" ;
242
243
Note: See TracBrowser for help on using the repository browser.