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

Last change on this file since 30595 was 29705, checked in by lucasvr, 6 years ago

New command, -ignorelabels, to indicate that labels are not to be rendered at all.

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