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

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

mapweaver version 0.7

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