source: subversion/applications/utils/gary68/highwaystat.pl @ 26507

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

osmDB updates

  • Property svn:executable set to *
File size: 2.9 KB
Line 
1#
2#
3#
4#
5#
6# Copyright (C) 2008, 2009, Gerhard Schwanz
7#
8# 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
9# Free Software Foundation; either version 3 of the License, or (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>
15#
16
17
18
19use strict ;
20use warnings ;
21
22use OSM::osm ;
23use File::stat;
24use Time::localtime;
25
26
27my $program = "highwaystat.pl" ;
28my $version = "1.1" ;
29my $usage = $program . " file.osm" ;
30
31my $wayId ;
32my $wayId2 ;
33my $wayUser ;
34my @wayNodes ;
35my @wayTags ;
36my $nodeId ;
37my $nodeId2 ;
38my $nodeUser ;
39my $nodeLat ;
40my $nodeLon ;
41my @nodeTags ;
42my $aRef1 ;
43my $aRef2 ;
44my $wayCount = 0 ;
45my $areaCount = 0 ;
46my $areaOpenCount = 0 ;
47
48my $time0 = time() ; my $time1 ;
49my $i ;
50my $key ;
51my $num ;
52my $tag1 ; my $tag2 ;
53
54my $osmName ;
55
56
57my %lon ;
58my %lat ;
59my %length ;
60
61###############
62# get parameter
63###############
64$osmName = shift||'';
65if (!$osmName)
66{
67        die (print $usage, "\n");
68}
69
70print "\n$program $version for file $osmName\n\n" ;
71print "\n\n" ;
72
73
74
75
76
77######################
78# get node information
79######################
80print "get node information...\n" ;
81openOsmFile ($osmName) ;
82
83
84($nodeId, $nodeLon, $nodeLat, $nodeUser, $aRef1) = getNode2 () ;
85if ($nodeId != -1) {
86        #@nodeTags = @$aRef1 ;
87}
88
89while ($nodeId != -1) {
90
91        $lon{$nodeId} = $nodeLon ;
92        $lat{$nodeId} = $nodeLat ;
93
94        # next
95        ($nodeId, $nodeLon, $nodeLat, $nodeUser, $aRef1) = getNode2 () ;
96        if ($nodeId != -1) {
97                #@nodeTags = @$aRef1 ;
98        }
99}
100
101
102print "get way information...\n" ;
103
104($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
105if ($wayId != -1) {
106        @wayNodes = @$aRef1 ;
107        @wayTags = @$aRef2 ;
108}
109while ($wayId != -1) { 
110        $wayCount++ ;
111
112        my $found = 0 ;
113        my $type = "" ;
114        foreach $tag1 (@wayTags) {
115                if ($tag1->[0] eq "highway") { $found = 1 ; $type = $tag1->[1] ; }
116        }
117
118        if ($found and (scalar @wayNodes>1) ) { 
119                my $i ; my $Length = 0 ;
120                for ($i = 0; $i<$#wayNodes; $i++) {
121                        $Length += distance ($lon{$wayNodes[$i]}, $lat{$wayNodes[$i]}, $lon{$wayNodes[$i+1]}, $lat{$wayNodes[$i+1]}) ;
122                }
123                if (defined $length{$type}) {
124                        $length{$type} += $Length ;
125                }
126                else {
127                        $length{$type} = $Length ;
128                }
129        }
130
131        # next way
132        ($wayId, $wayUser, $aRef1, $aRef2) = getWay2 () ;
133        if ($wayId != -1) {
134                @wayNodes = @$aRef1 ;
135                @wayTags = @$aRef2 ;
136        }
137}
138
139closeOsmFile () ;
140
141
142
143print "\n" ;
144
145my $wayType ;
146foreach $wayType (sort keys %length) {
147        printf "%-30s %8.2f km\n", $wayType, $length{$wayType} ;
148}
149
150
151$time1 = time () ;
152
153
154
155print "\nINFO: finished after ", stringTimeSpent ($time1-$time0), "\n\n" ;
156
157
Note: See TracBrowser for help on using the repository browser.