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

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

checkcross2 new

  • Property svn:executable set to *
File size: 5.9 KB
Line 
1#
2#
3# checkcross2.pl by gary68
4#
5#
6#
7# Copyright (C) 2010, 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 = "checkcross2.pl" ;
31my $usage = $program . " file.osm out.htm" ;
32my $version = "1.0" ;
33
34my $wayId ; 
35my $wayUser ; my @wayNodes ; my @wayTags ;
36my $nodeId ; 
37my $nodeUser ; my $nodeLat ; my $nodeLon ; my @nodeTags ;
38my $aRef1 ; my $aRef2 ;
39
40
41my $time0 = time() ; my $time1 ; my $timeA ;
42
43my $html ;
44my $gpx ;
45my $osmName ;
46my $htmlName ;
47my $gpxName ;
48
49my %lon ; my %lat ;
50my %motorwayNodes = () ;
51
52###############
53# get parameter
54###############
55$osmName = shift||'';
56if (!$osmName)
57{
58        die (print $usage, "\n");
59}
60
61$htmlName = shift||'';
62if (!$htmlName)
63{
64        die (print $usage, "\n");
65}
66
67$gpxName = $htmlName ;
68$gpxName =~ s/htm/gpx/ ;
69
70print "\n$program $version for file $osmName\n\n" ;
71
72
73
74
75######################
76# skip all nodes first
77######################
78openOsmFile ($osmName) ;
79print "pass1: skipping nodes...\n" ;
80skipNodes () ;
81
82
83#############################
84# identify check/against ways
85#############################
86print "pass1...\n" ;
87($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
88if ($wayId != -1) {
89        @wayNodes = @$aRef1 ;
90        @wayTags = @$aRef2 ;
91}
92while ($wayId != -1) { 
93
94        my $mw = 0 ;
95        foreach my $tag (@wayTags) {
96                if ( ($tag->[0] eq "highway") and ($tag->[1] eq "motorway") ) {
97                        $mw = 1 ;
98                }
99        } 
100
101        if ($mw == 1) {
102                foreach my $node (@wayNodes) {
103                        $motorwayNodes { $node } = 1 ;
104                }
105        }
106
107        # next way
108        ($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
109        if ($wayId != -1) {
110                @wayNodes = @$aRef1 ;
111                @wayTags = @$aRef2 ;
112        }
113}
114
115closeOsmFile () ;
116
117
118######################
119# skip all nodes first
120######################
121openOsmFile ($osmName) ;
122print "pass2: skipping nodes...\n" ;
123skipNodes () ;
124
125
126#############################
127# identify check/against ways
128#############################
129print "pass2...\n" ;
130($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
131if ($wayId != -1) {
132        @wayNodes = @$aRef1 ;
133        @wayTags = @$aRef2 ;
134}
135while ($wayId != -1) { 
136
137        my $track = 0 ;
138        foreach my $tag (@wayTags) {
139                if ( ($tag->[0] eq "highway") and ($tag->[1] eq "track") ) {
140                        $track = 1 ;
141                }
142        } 
143
144        if ($track == 1) {
145                if (scalar @wayNodes > 2) {
146                        for (my $i = 1; $i<$#wayNodes; $i++) {
147                                my $node = $wayNodes[$i] ;
148                                if (defined $motorwayNodes {$node}) {
149                                        $motorwayNodes { $node } = 2 ;
150                                }
151                        }
152                }
153        }
154
155        # next way
156        ($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
157        if ($wayId != -1) {
158                @wayNodes = @$aRef1 ;
159                @wayTags = @$aRef2 ;
160        }
161}
162
163closeOsmFile () ;
164
165
166######################
167# get node information
168######################
169print "pass3: get node information...\n" ;
170
171openOsmFile ($osmName) ;
172
173($nodeId, $nodeLon, $nodeLat, $nodeUser, $aRef1) = getNode2 () ;
174if ($nodeId != -1) {
175        #@nodeTags = @$aRef1 ;
176}
177
178while ($nodeId != -1) {
179
180        if (defined $motorwayNodes{$nodeId}) {
181                if ($motorwayNodes{$nodeId} == 2) {
182                        $lon{$nodeId} = $nodeLon ;
183                        $lat{$nodeId} = $nodeLat ;
184                }
185        }
186
187        # next
188        ($nodeId, $nodeLon, $nodeLat, $nodeUser, $aRef1) = getNode2 () ;
189        if ($nodeId != -1) {
190                #@nodeTags = @$aRef1 ;
191        }
192}
193
194closeOsmFile () ;
195
196
197
198
199
200
201$time1 = time () ;
202
203
204##################
205# PRINT HTML INFOS
206##################
207open ($html, ">", $htmlName) || die ("Can't open html output file") ;
208open ($gpx, ">", $gpxName) || die ("Can't open gpx output file") ;
209
210
211printHTMLiFrameHeader ($html, "Cross2 Check by Gary68") ;
212printGPXHeader ($gpx) ;
213
214print $html "<H1>Cross2 Check by Gary68</H1>\n" ;
215print $html "<p>Version ", $version, "</p>\n" ;
216print $html "<H2>Statistics</H2>\n" ;
217print $html "<p>", stringFileInfo ($osmName), "<br>\n" ;
218
219print $html "<H2>Crossings found</H2>\n" ;
220print $html "<p>At the given location two ways that shouldn't do intersect WITH a common node." ;
221print $html "<table border=\"1\">\n";
222print $html "<tr>\n" ;
223print $html "<th>Line</th>\n" ;
224print $html "<th>NodeId</th>\n" ;
225print $html "<th>Links</th>\n" ;
226print $html "<th>JOSM</th>\n" ;
227print $html "<th>Pic</th>\n" ;
228print $html "</tr>\n" ;
229
230my $i = 0 ;
231
232foreach my $node (keys %motorwayNodes) {
233
234        if ($motorwayNodes{$node} == 2) {
235                $i++ ;
236                # HTML
237                print $html "<tr>\n" ;
238                print $html "<td>", $i , "</td>\n" ;
239                print $html "<td>", historyLink ("node", $node), "</td>\n" ;
240                print $html "<td>", osmLink ($lon{$node}, $lat{$node}, 16) , "<br>\n" ;
241                print $html osbLink ($lon{$node}, $lat{$node}, 16) , "<br>\n" ;
242                print $html mapCompareLink ($lon{$node}, $lat{$node}, 16) , "</td>\n" ;
243                print $html "<td>", josmLinkSelectNode ($lon{$node}, $lat{$node}, 0.01, $node), "</td>\n" ;
244                print $html "<td>", picLinkOsmarender ($lon{$node}, $lat{$node}, 16), "</td>\n" ;
245                print $html "</tr>\n" ;
246
247                # GPX
248                my $text = "ChkCross2 - " . $node  . " level way crossing WITH common node" ;
249                printGPXWaypoint ($gpx, $lon{$node}, $lat{$node}, $text) ;
250        }
251}
252print $html "</table>\n" ;
253print $html "<p>$i lines total</p>\n" ;
254
255
256
257########
258# FINISH
259########
260print $html "<p>", stringTimeSpent ($time1-$time0), "</p>\n" ;
261printHTMLFoot ($html) ;
262printGPXFoot ($gpx) ;
263
264close ($html) ;
265close ($gpx) ;
266
267
268print "\n$program finished after ", stringTimeSpent ($time1-$time0), "\n\n" ;
269
270print "$i lines total\n\n" ;
271
272
Note: See TracBrowser for help on using the repository browser.