source: subversion/applications/utils/gary68/mwNodes.pm @ 26462

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

mapweaver new version - font-families

File size: 5.1 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 mwNodes ; 
20
21use strict ;
22use warnings ;
23
24use OSM::osm 8.21 ;
25
26use mwConfig ;
27use mwFile ;
28use mwRules ;
29use mwMap ;
30use mwMisc ;
31use mwLabel ;
32
33use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
34
35require Exporter ;
36
37@ISA = qw ( Exporter AutoLoader ) ;
38
39@EXPORT = qw (  processNodes
40                        createPoiDirectory
41                 ) ;
42
43
44sub processNodes {
45
46        print "drawing nodes...\n" ;
47
48        my $lonRef; my $latRef; my $tagRef ;
49        ($lonRef, $latRef, $tagRef) = getNodePointers () ;
50
51        foreach my $nodeId (keys %$lonRef) {
52                my @tags = @{ $$tagRef{$nodeId} } ;
53                my $tagsString = "" ;
54
55                my $ruleRef = getNodeRule (\@tags) ;
56                if (defined $ruleRef) {
57
58                        # draw disc first !
59                        if (grep /yes/, $$ruleRef{'disc'})  {
60                                my $svgString = "" ;
61                                if ( $$ruleRef{'discsvgstring'} ne "" ) {
62                                        $svgString = $$ruleRef{'discsvgstring'} ;
63                                }
64                                else {
65                                        $svgString = "fill=\"$$ruleRef{'disccolor'}\" stroke=\"none\" fill-opacity=\"$$ruleRef{'discopacity'}\"" ;
66                                }
67                                drawCircle ($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'discradius'}, 1, $svgString, 'nodes') ;
68                        }
69
70                        if (grep /yes/, $$ruleRef{'circle'})  {
71                                my $svgString = "" ;
72                                if ( $$ruleRef{'circlesvgstring'} ne "" ) {
73                                        $svgString = $$ruleRef{'circlesvgstring'} ;
74                                }
75                                else {
76                                        $svgString = "fill=\"none\" stroke=\"$$ruleRef{'circlecolor'}\" stroke-width=\"$$ruleRef{'circlethickness'}\"" ;
77                                }
78                                drawCircle ($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'circleradius'}, 1, $svgString, 'nodes') ;
79                        }
80
81                        if ( ($$ruleRef{'size'} > 0) and ($$ruleRef{'icon'} eq "none") )  {
82                                my $svgString = "" ;
83                                if ( $$ruleRef{'svgstring'} ne "" ) {
84                                        $svgString = $$ruleRef{'svgstring'} ;
85                                }
86                                else {
87                                        $svgString = "fill=\"$$ruleRef{'color'}\"" ;
88                                }
89
90                                if ( $$ruleRef{'shape'} eq "circle") {
91                                        drawCircle ($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes') ;
92                                }
93                                elsif ( $$ruleRef{'shape'} eq "square") {
94                                        drawSquare ($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes') ;
95                                }
96                                elsif ( $$ruleRef{'shape'} eq "triangle") {
97                                        drawTriangle ($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes') ;
98                                }
99                                elsif ( $$ruleRef{'shape'} eq "diamond") {
100                                        drawDiamond ($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes') ;
101                                }
102                        }
103
104                        if ( ($$ruleRef{'label'} ne "none") or ($$ruleRef{'icon'} ne "none") ) {
105                                my ($labelText, $ref) = createLabel (\@tags, $$ruleRef{'label'}, $$lonRef{$nodeId}, $$latRef{$nodeId}) ;
106                                my $labelSize = $$ruleRef{'labelsize'} ;
107                                my $labelColor = $$ruleRef{'labelcolor'} ;
108                                my $labelFont = $$ruleRef{'labelfont'} ;
109                                my $labelFontFamily = $$ruleRef{'labelfontfamily'} ;
110                                my $icon = $$ruleRef{'icon'} ;
111                                my $iconSize = $$ruleRef{'iconsize'} ;
112
113                                my $svgText = createTextSVG ( $labelFontFamily, $labelFont, $labelSize, $labelColor, undef, undef) ;
114
115                                placeLabelAndIcon($$lonRef{$nodeId}, $$latRef{$nodeId}, 0, $$ruleRef{'size'}, $labelText, $svgText, $icon, $iconSize, $iconSize, "nodes") ;
116                        }
117
118                        # fill poi directory
119
120                        my $thing0 = $$ruleRef{'keyvalue'} ;
121                        my ($thing) = ( $thing0 =~ /.+=(.+)/ ) ;
122
123                        my $dirName = getValue ("name", $$tagRef{$nodeId} ) ;
124                        if (    ( cv('poi') eq "1" ) and 
125                                ( defined $dirName ) and 
126                                ( $$ruleRef{'direxclude'} eq "no") 
127                        ) {
128                                $dirName .=  " ($thing)" ;
129                                if ( cv('grid') > 0) {
130                                        my $sq = gridSquare($$lonRef{$nodeId}, $$latRef{$nodeId}, cv('grid')) ;
131                                        if (defined $sq) {
132                                                addToPoiHash ($dirName, $sq) ;
133                                        }
134                                }
135                                else {
136                                        # $poiHash{$dirName} = 1 ;
137                                        addToPoiHash ($dirName, undef) ;
138                                }
139                        }
140                       
141
142                } # defined ruleref
143        }
144
145}
146
147# ------------------------------------------------------------------------------------
148
149sub createPoiDirectory {
150        my $poiName ;
151        my $poiFile ;
152        $poiName = cv ('out')  ;
153        $poiName =~ s/\.svg/\_pois.txt/ ;
154        setConfigValue("poiname", $poiName) ;
155        print "creating poi file $poiName ...\n" ;
156        open ($poiFile, ">", $poiName) or die ("can't open poi file $poiName\n") ;
157
158        my $ref = getPoiHash() ;
159        my %poiHash = %$ref ;
160
161        if ( cv('grid') eq "0") {
162                foreach my $poi (sort keys %poiHash) {
163                        $poi = replaceHTMLCode ( $poi ) ;
164                        print $poiFile "$poi\n" ;
165                }
166        }
167        else {
168                foreach my $poi (sort keys %poiHash) {
169                        $poi = replaceHTMLCode ( $poi ) ;
170                        print $poiFile "$poi\t" ;
171                        foreach my $square (sort keys %{$poiHash{$poi}}) {
172                                print $poiFile "$square " ;
173                        }
174                        print $poiFile "\n" ;
175                }
176        }
177        close ($poiFile) ;
178}
179
1801 ;
181
182
Note: See TracBrowser for help on using the repository browser.