source: subversion/applications/utils/gary68/mwConfig.pm @ 26424

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

new mapweaver version. directory exclusions

File size: 13.9 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 mwConfig ; 
20
21use strict ;
22use warnings ;
23
24
25use Getopt::Long ;
26
27use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
28
29require Exporter ;
30
31@ISA = qw ( Exporter AutoLoader ) ;
32
33@EXPORT = qw (  cv
34                        initConfig
35                        readConfigFile
36                        setConfigValue
37                        printConfig
38                        printConfigDescriptions
39                        getProgramOptions
40                 ) ;
41
42my @initial = ( ["verbose",0,  "print some more information (CLO)", "misc"],
43                        ["debug",0,    "print debug information (CLO)",     "misc"],
44                        ["projection", "merc","Used projection",            "map"],
45                        ["ellipsoid",  "WGS84","Used ellipsoid",            "map"],
46
47                        ["ruleDefaultNodeSize",      "20",      "default size of dot for nodes",  "nodes"],
48                        ["ruleDefaultNodeColor",     "black",   "default color of dot for nodes", "nodes"],
49                        ["ruleDefaultNodeShape",     "circle",  "default shape of node",          "nodes"],
50                        ["ruleDefaultNodeLabel",     "name",  "default key for label",          "nodes"],
51                        ["ruleDefaultNodelabelSize",     30,  "default size of label text",          "nodes"],
52                        ["ruleDefaultNodeIconSize",  40,        "default size of icon",           "nodes"],
53                        ["ruleDefaultNodeFromScale",  0,        "default fromScale of node",      "nodes"],
54                        ["ruleDefaultNodeToScale",   1000000,   "default toScale of node",        "nodes"],
55
56                        ["ruleDefaultWayLabel","name","default label of way", "ways"],
57                        ["ruleDefaultWayLabelColor","black","default label color of way", "ways"],
58                        ["ruleDefaultWayLabelSize",30,"default label size of way", "ways"],
59                        ["ruleDefaultWayLabelFont","sans-serif","default label font of way", "ways"],
60                        ["ruleDefaultWayLabelOffset",15,"default label Tspan offset of way", "ways"],
61
62                        ["ruleDefaultWayColor","gray","default color of way", "ways"],
63                        ["ruleDefaultWaySize",20,"default size of way", "ways"],
64                        ["ruleDefaultWayBorderColor","black","default color of border of way", "ways"],
65                        ["ruleDefaultWayBorderSize",2,"default size of border of way", "ways"],
66                        ["ruleDefaultWayDash","","default dash style of way", "ways"],
67                        ["ruleDefaultWayDashCap","butt","default cap for dashes of way", "ways"],
68                        ["ruleDefaultWayFromScale",0,"default fromScale of way", "ways"],
69                        ["ruleDefaultWayToScale",1000000,"default toScale of way", "ways"],
70
71                        ["ruleDefaultAreaColor","lightgray","default area color", "areas"],
72                        ["ruleDefaultAreaMinSize",0,"minimum size of area to be drawn", "areas"],
73                        ["ruledefaultAreaFromScale",0,"default fromScale of way", "areas"],
74                        ["ruledefaultAreaToScale",1000000,"default toScale of way", "areas"],
75
76                        ["ruledefaultRouteColor","black","default color of route", "routes"],
77                        ["ruledefaultRouteSize",5,"default size of route", "routes"],
78                        ["ruledefaultRouteDash","","default dash of route", "routes"],
79                        ["ruledefaultRouteLinecap","round","default linecap of route", "routes"],
80                        ["ruledefaultRouteOpacity",100,"default opacity of route", "routes"],
81                        ["ruledefaultRouteLabel","ref","default label of route", "routes"],
82                        ["ruledefaultRouteLabelSize",25,"default label size of route", "routes"],
83                        ["ruledefaultRouteNodeSize",10,"default node size of route nodes", "routes"],
84
85                        ["ruledefaultRouteFromScale",0,"default fromScale of route", "routes"],
86                        ["ruledefaultRouteToScale",50000,"default toScale of route", "routes"],
87
88                        ["in","map.osm","osm in file (CLO)", "job"],
89                        ["ini","mwconfig.ini","file with configuration values (CLO)", "misc"],
90                        ["out","mapweaver.svg","svg output name (CLO)", "job"],
91                        ["style","mwStandardRules.txt","file with render rules (CLO)", "job"],
92                        ["svgname","mapweaver.svg","output file name for svg graphics (CLO)", "job"],
93                        ["size",2200,"size in pixels x axis, 300dpi (CLO)", "map"],
94                        ["legend",0,"appearance and position of legend (CLO)", "map"],
95                        ["bgcolor","white","background color of map (CLO)", "map"],
96                        ["grid",0,"number of grid cells, 0 = no grid (CLO)", "map"],
97                        ["gridcolor","black","color of grid lines (CLO)", "map"],
98                        ["coords",0,"draw coordinate system (CLO)", "map"],
99                        ["coordsexp",-2,"size of grid cells, exp 10 (CLO)", "map"],
100                        ["coordscolor","black","color of coordinates grid lines (CLO)", "map"],
101                        ["clip",0," (CLO)", "job"],
102                        ["clipbbox",""," (CLO)", "job"],
103                        ["pad",0," (CLO)", "job"],
104                        ["ppc",6,"points per character (CLO)", "misc", "map"],
105                        ["pdf",0,"convert output to pdf (CLO)", "job"],
106                        ["png",0,"convert output to png (CLO)", "job"],
107                        ["pngdpi",115,"png resolution (CLO)", "job"],
108                        ["dir",0,"add directory (CLO)", "additional information"],
109                        ["direxcludedefault", "no", "object default property for directory entries", "additional information"],
110                        ["poi",0,"add POI directory (CLO)", "additional information"],
111                        ["dirpdf",0,"create directory pdf (CLO)", "additional information"],
112                        ["dircolnum",2,"number of text columns for directory pdf (CLO)", "additional information"],
113                        ["dirtitle","Directory","title for directory (CLO)", "additional information"],
114                        ["tagstat",0,"print tag statistics (CLO)", "misc"],
115                        ["declutter",1," (CLO)", "map"],
116                        ["allowIconMove",0," (CLO)", "map"],
117                        ["forceNodes",0," (CLO)", "map"],
118                        ["lineDist",10,"distance between text lines in pixels", "map"],
119                        ["maxCharPerLine",20,"maximum characters per line in node label", "map"],
120                        ["help",0,"prints help texts (CLO)", "misc"],
121                        ["oneways",0,"add oneway arrows (CLO)", "map"],
122                        ["onewayColor","white","color of oneway arrows (CLO)", "map"],
123                        ["onewaySize",20,"size of oneway arrows (CLO)", "map"],
124                        ["autobridge",1,"automatically draw bridges and tunnels (CLO)", "map"],
125                        ["noLabel",0,"", "map"],
126                        ["place","","search for place name in osm file and create map (CLO)", "job"],
127                        ["placefile","","name of file containing only place information (CLO)", "job"],
128                        ["lonrad",2,"radius lon in km for place map (CLO)", "job"],
129                        ["latrad",2,"radius lat in km for place map (CLO)", "job"],
130                        ["ruler",0,"draw ruler; positions 1..4 (CLO)", "map"],
131                        ["rulercolor","black","color of ruler (CLO)", "map"],
132                        ["rulerbackground","none","background of ruler, none=transparent (CLO)", "map"],
133                        ["scale",0,"draw scale; positions 1..4 (CLO)", "map"],
134                        ["scalecolor","black","color of scale (CLO)", "map"],
135                        ["scalebackground","none","color of scale background; none=transparent (CLO)", "map"],
136                        ["scaleset",0,"set scale of map (i.e. 10000) (CLO)", "map"],
137                        ["rulescaleset",0,"set assumed scale for rules (CLO)", "map"],
138                        ["routelabelcolor","black","", "routes"],
139                        ["routelabelsize",20,"", "routes"],
140                        ["routelabelfont","sans-serif","", "routes"],
141                        ["routelabeloffset",20,"", "routes"],
142                        ["routeicondist",70,"", "routes"],
143                        ["routeiconscale",1,"", "routes"],
144                        ["routeicondir","./routeicons","", "routes"],
145                        ["poifile","","name of external POI file (CLO)", "job"],
146                        ["relid",0,"relation ID for hikingbook (CLO)", "misc"],
147                        ["rectangles","","draw rectangles for hikingbook (CLO)", "misc"],
148                        ["pagenumbers","","add page numbers to map (CLO)", "misc"],
149                        ["ra",0,"relation analyzer mode (CLO)", "misc"],
150                        ["multionly",0,"draw only multipolygons (CLO)", "misc"],
151                        ["foot","mapweaver by gary68 - data by www.openstreetmap.org","text for footer (CLO)", "map"],
152                        ["footcolor","black","color for footer (CLO)", "map"],
153                        ["footbackground","none","background color for footer (CLO)", "map"],
154                        ["footsize",40,"font size for footer (CLO)", "map"],
155                        ["head","","text for header (CLO)", "map"],
156                        ["headcolor","black","color for header (CLO)", "map"],
157                        ["headbackground","none","background color for header (CLO)", "map"],
158                        ["headsize",40,"font size for header (CLO)", "map"],
159
160                        ["minAreaSize",400,"min size of area to be drawn on map", "map"],
161                        ["oceanColor","lightblue","color of ocean", "map"],
162                        ["cIE",0,"osmosis clipIncompleteEntities instead of completeObjects (CLP)", "map"]
163
164                  ) ;
165
166my %cv = () ;
167my %explanation = () ;
168
169# --------------------------------------------------------------------------------
170
171sub initConfig {
172
173        # set initial values according to program internal values from array @initial
174
175        foreach my $kv (@initial) {
176                $cv{ lc( $kv->[0] ) } = $kv->[1] ;
177                $explanation{ lc( $kv->[0] ) } = $kv->[2] ;
178        }
179}
180
181
182sub setConfigValue {
183
184        # allows any module to change a certain k/v pair
185
186        my ($k, $v) = @_ ;
187
188        $k = lc ( $k ) ;
189        $cv{$k} = $v ;
190        if ($cv{"verbose"} > 1) { print "config key $k. value changed to $v\n" ; }
191}
192
193sub cv {
194
195        # access a value by key
196
197        my $k = shift ;
198
199        $k = lc ( $k ) ;
200        if ( ! defined $cv{ $k } ) { print "WARNING: requested config key $k not defined!\n" ; }
201        return ( $cv{ $k } ) ;
202}
203
204sub printConfig {
205
206        # print actual config to stdout
207
208        print "\nActual configuration\n" ;
209
210        my %cats = () ;
211        foreach my $e (@initial) {
212                $cats{ $e->[3] } = 1 ;
213        }
214
215        foreach my $cat (sort keys %cats) {
216                my @entries = () ;
217                foreach my $e (@initial) {
218                        if ($e->[3] eq $cat) {
219                                push @entries, $e->[0] ;
220                        }
221                }
222                print "\nCATEGORY $cat\n" ;
223                print "--------\n" ;
224                foreach my $e ( sort { $a cmp $b } @entries ) {
225                        printf "%-30s %-30s\n", $e, cv($e) ;
226                }
227        }
228
229        print "\n" ;
230}
231
232sub readConfigFile {
233
234        # read ini file; initial k/v pairs might be changed
235
236        my $fileName = shift ;
237        my $lc = 0 ;
238       
239        print "reading config file $fileName\n" ;
240
241        open (my $file, "<", $fileName) or die ("ERROR: could not open ini file $fileName\n") ;
242        my $line = "" ;
243        while ($line = <$file>) {
244                $lc ++ ;
245                if ( ! grep /^#/, $line) {
246                        my ($k, $v) = ( $line =~ /(.+?)=(.+)/ ) ;
247                        if ( ( ! defined $k ) or ( ! defined $v ) ) {
248                                print "WARNING: could not parse config line: $line" ;
249                        }
250                        else {
251                                $k = lc ( $k ) ;
252                                $cv{ $k } = $v ;
253                        }
254                }
255        }
256        close ($file) ;
257        print "$lc lines read.\n\n" ;
258}
259
260
261# ---------------------------------------------------------------------------------------
262
263sub getProgramOptions {
264
265
266my $optResult = GetOptions (    "in=s"          => \$cv{'in'},          # the in file, mandatory
267                                "ini:s"         => \$cv{'ini'},
268                                "style=s"       => \$cv{'style'},               # the style file, mandatory
269                                "out:s"         => \$cv{'svgname'},             # outfile name or default
270                                "size:i"        => \$cv{'size'},                # specifies pic size longitude in pixels
271                                "legend:i"      => \$cv{'legend'},              # legend?
272                                "bgcolor:s"     => \$cv{'bgcolor'},             # background color
273                                "grid:i"        => \$cv{'grid'},                # specifies grid, number of parts
274                                "gridcolor:s"   => \$cv{'gridcolor'},           # color used for grid and labels
275                                "coords"        => \$cv{'coords'},              #
276                                "coordsexp:i"   => \$cv{'coordsexp'},           #
277                                "coordscolor:s" => \$cv{'coordscolor'},         #
278                                "clip:i"        => \$cv{'clip'},                # specifies how many percent data to clip on each side
279                                "clipbbox:s"    => \$cv{'clipbbox'},            # bbox data for clipping map out of data
280                                "pad:i"         => \$cv{'pad'},         # specifies how many percent data to pad on each side
281                                "ppc:f"         => \$cv{'ppc'},         # pixels needed per label char in font size 10
282                                "pdf"           => \$cv{'pdf'},         # specifies if pdf will be created
283                                "png"           => \$cv{'png'},         # specifies if png will be created
284                                "pngdpi:i"              => \$cv{'pngdpi'},              # specifies png resolution
285                                "dir"           => \$cv{'dir'},         # specifies if directory of streets will be created
286                                "poi"           => \$cv{'poi'},         # specifies if directory of pois will be created
287                                "dirpdf"                => \$cv{'dirpdf'},
288                                "dircolnum:i"   => \$cv{'dircolnum'},
289                                "dirtitle:s"    => \$cv{'dirtitle'},
290                                "tagstat"       => \$cv{'tagstat'},     # lists k/v used in osm file
291                                "declutter"     => \$cv{'declutter'},
292                                "allowiconmove" => \$cv{'allowiconmove'},
293                                "help"          => \$cv{'help'},                #
294                                "oneways"       => \$cv{'oneways'},
295                                "onewaycolor:s" => \$cv{'onewaycolor'},
296                                "onewaysize:i" => \$cv{'onewaysize'},
297                                "autobridge:i"  => \$cv{'autobridge'},
298                                "nolabel"       => \$cv{'nolabel'},
299                                "place:s"       => \$cv{'place'},               # place to draw
300                                "placefile:s"   => \$cv{'placefile'},           # file to look for places
301                                "lonrad:f"      => \$cv{'lonrad'},
302                                "latrad:f"      => \$cv{'latrad'},
303                                "ruler:i"       => \$cv{'ruler'},
304                                "rulercolor:s"  => \$cv{'rulercolor'},
305                                "rulerbackground:s"     => \$cv{'rulerbackground'},
306                                "scale:i"               => \$cv{'scale'},
307                                "scalecolor:s"  => \$cv{'scalecolor'},
308                                "scalebackground:s"     => \$cv{'scalebackground'},
309                                "scaleset:i"    => \$cv{'scaleset'},
310                                "rulescaleset:i" => \$cv{'rulescaleset'},
311                                "routelabelcolor:s"     => \$cv{'routelabelcolor'},             
312                                "routelabelsize:i"      => \$cv{'routelabelsize'},             
313                                "routelabelfont:s"      => \$cv{'routelabelfont'},             
314                                "routelabeloffset:i"    => \$cv{'routelabeloffset'},           
315                                "routeicondist:i"       => \$cv{'routeicondist'},
316                                "routeiconscale:f"      => \$cv{'routeiconscale'},
317                                "icondir:s"             => \$cv{'icondir'},
318                                "foot:s"                => \$cv{'foot'},
319                                "footcolor:s"           => \$cv{'footcolor'},
320                                "footbackground:s"              => \$cv{'footbackground'},
321                                "footsize:i"            => \$cv{'footsize'},
322                                "head:s"                => \$cv{'head'},
323                                "headcolor:s"           => \$cv{'headcolor'},
324                                "headbackground:s"              => \$cv{'headbackground'},
325                                "headsize:i"            => \$cv{'headsize'},
326                                "poifile:s"     => \$cv{'poifile'},             
327                                "relid:i"       => \$cv{'relid'},
328                                "rectangles:s"  => \$cv{'rectangles'},
329                                "pagenumbers:s" => \$cv{'pagenumbers'},
330                                "multionly"     => \$cv{'multionly'},           # draw only areas from multipolygons
331                                "ra:s"          => \$cv{'ra'},          #
332                                "debug"         => \$cv{'debug'},                       # turns debug messages on
333                                "cie"   => \$cv{'cie'},                 # turns debug messages on
334                                "verbose"       => \$cv{'verbose'} ) ;          # turns twitter on
335
336
337}
338
339sub printConfigDescriptions {
340
341        my @texts = @initial ;
342
343        @texts = sort {$a->[0] cmp $b->[0]} @texts ;
344
345        print "\nconfig value descriptions\n\n" ;
346        printf "%-25s %-50s %-20s\n" , "key" , "description", "default" ;
347        foreach my $t (@texts) {
348                my $def = $t->[1] ;
349                if ($def eq "") { $def = "<EMPTY>" ; }
350                printf "%-25s %-50s %-20s\n" , $t->[0] , $t->[2], $def ;
351        }
352        print "\n" ;
353}
354
355
3561 ;
357
358
Note: See TracBrowser for help on using the repository browser.