source: subversion/applications/utils/gary68/mwWays.pm @ 26199

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

mw version 0.08

File size: 4.6 KB
Line 
1#
2# PERL mapweaver module by gary68
3#
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
19package mwWays ; 
20
21use strict ;
22use warnings ;
23
24use mwConfig ;
25use mwFile ;
26use mwRules ;
27use mwMap ;
28use mwMisc ;
29use mwWayLabel ;
30use mwCoastLines ;
31
32use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
33
34require Exporter ;
35
36@ISA = qw ( Exporter AutoLoader ) ;
37
38@EXPORT = qw (  processWays
39                getCoastWays
40                 ) ;
41
42my $areasOmitted = 0 ;
43my $areasDrawn = 0 ;
44
45my @coastWays = () ;
46
47sub processWays {
48
49        print "drawing ways/areas...\n" ;
50
51        my $nodesRef; my $tagRef ;
52        ($nodesRef, $tagRef) = getWayPointers () ;
53        my ($lonRef, $latRef, $nodeTagRef) = getNodePointers() ;
54
55        foreach my $wayId (keys %$nodesRef) {
56                my @tags = @{ $$tagRef{$wayId} } ;
57                my $tagsString = "" ;
58
59                # coast
60                my $v = getValue ("natural", \@tags) ;
61                if ( (defined $v) and ($v eq "coastline") ) {
62                        push @coastWays, $wayId ;
63                } 
64
65                # WAYS
66
67                my $ruleRef = getWayRule (\@tags) ;
68                if (defined $ruleRef) {
69                        my @nodes = @{ $$nodesRef{ $wayId } } ;
70
71                        my $layer = getValue ("layer", $$tagRef{$wayId}) ;
72                        if ( ! defined $layer ) { $layer = 0 ; }
73
74                        # TODO check for numeric!!!
75
76                        if ( ( $$ruleRef{'svgstringtop'} ne "" ) or ( $$ruleRef{'svgstringbottom'} ne "" ) ) {
77                                # TODO individual (NEEDS sizes anyway!!! for layers... or automatic?)
78                        }
79                        else {
80
81                                # top (actual way)
82                                my $size = $$ruleRef{'size'} ;
83                                my $color = $$ruleRef{'color'} ;
84                                my $svgString = "stroke=\"$color\" stroke-width=\"$size\" stroke-linecap=\"round\" fill=\"none\" stroke-linejoin=\"round\"" ;
85                                drawWay ( \@nodes, 1, $svgString, undef, $layer + $size/100 ) ;
86
87                                # bottom (border)
88                                $size = 2 * $$ruleRef{'bordersize'} + $$ruleRef{'size'} ;
89                                $color = $$ruleRef{'bordercolor'} ;
90                                $svgString = "stroke=\"$color\" stroke-width=\"$size\" stroke-linecap=\"round\" fill=\"none\" stroke-linejoin=\"round\"" ;
91                                drawWay ( \@nodes, 1, $svgString, undef, $layer -0.3 + $size/100 ) ;
92                        }
93
94                        # LABEL WAY
95
96                        if ($$ruleRef{'label'} ne "none") {
97
98                                my $name = "" ; my $ref1 ; my @names ;
99
100                                if (grep /shield/i, $$ruleRef{'label'} ) {
101                                        ($name, $ref1) = createLabel (\@tags, "ref",0, 0) ;
102                                        my $ref = $name ;
103
104                                        if (grep /;/, $ref) {
105                                                my @a = split /;/, $ref ;
106                                                $ref = $a[0] ; 
107                                        }
108
109                                        if ($ref ne "") {
110                                                @names = ($ref) ;
111                                                $name = $$ruleRef{'label'} . ":$ref" ;
112                                                # print "DRAW WAY: name set to $name\n" ;
113                                        }
114                                        else {
115                                                @names = () ;
116                                                $name = "" ;
117                                        }
118                                }
119                                else {
120                                        ($name, $ref1) = createLabel (\@tags, $$ruleRef{'label'}, 0, 0) ;
121                                        @names = @$ref1 ;
122                                }
123
124                                if ( ( cv('nolabel') eq "1") and ($name eq "") ) { $name = "NO LABEL" ; }
125
126                                if ($name ne "") { 
127                                        addWayLabel ($wayId, $name, $ruleRef) ; 
128                                }
129                                if ( cv('dir') eq "1") {
130                                        if ( cv('grid') > 0) {
131                                                foreach my $node ( @nodes ) {
132                                                        foreach my $name (@names) {
133                                                                my $sq = gridSquare($$lonRef{$node}, $$latRef{$node}, cv('grid') ) ;
134                                                                if (defined $sq) {
135                                                                        addToDirectory($name, $sq) ;
136                                                                }
137                                                        }
138                                                }
139                                        }
140                                        else {
141                                                foreach my $name (@names) {
142                                                        addToDirectory ($name, undef) ;
143                                                }
144                                        }
145                                }
146                        }  # label
147
148                }
149
150                # AREAS
151
152                $ruleRef = getAreaRule (\@tags) ;
153                if (defined $ruleRef) {
154                        my $color = $$ruleRef{'color'} ;
155                        my $icon = $$ruleRef{'icon'} ;
156                        my $base = $$ruleRef{'base'} ;
157                        my $svgString = $$ruleRef{'svgstring'} ;
158                        my @nodes = @{ $$nodesRef{ $wayId } } ;
159                        my $size = areaSize (\@nodes) ;
160                        my @ways = [@nodes] ;
161
162                        if ($svgString eq "") {
163                                $svgString = "fill=\"$color\" " ;
164                        }
165
166                        if ($size > cv('minareasize') ) {
167                                if ($base eq "yes") {
168                                        drawArea ($svgString, $icon, \@ways, 1, "base") ;
169                                }
170                                else {
171                                        drawArea ($svgString, $icon, \@ways, 1, "area") ;
172                                }
173                                $areasDrawn++ ;
174                        }
175                        else {
176                                $areasOmitted++ ;
177                        }
178
179                } # Area
180        }
181
182        print "$areasDrawn areas drawn, $areasOmitted omitted because they are too small\n" ;
183
184        my $cw = scalar @coastWays ;
185        if ( cv('verbose')) { print "$cw coast line ways found.\n" ; }
186 
187        preprocessWayLabels() ;
188        createWayLabels() ;
189
190        if ($cw > 0) {
191                processCoastLines (\@coastWays) ;
192        }
193}
194
1951 ;
196
197
Note: See TracBrowser for help on using the repository browser.