# # PERL mapweaver module by gary68 # # # # # Copyright(C)2011, Gerhard Schwanz # # 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 # Free Software Foundation; either version 3 of the License, or(at your option)any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with this program; if not, see # package mwNodes; use strict; use warnings; use OSM::osm 8.21; use mwConfig; use mwFile; use mwRules; use mwMap; use mwMisc; use mwLabel; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); require Exporter; @ISA = qw(Exporter AutoLoader); @EXPORT = qw(processNodes createPoiDirectory ); sub processNodes{ print "drawing nodes...\n"; my $lonRef; my $latRef; my $tagRef; ($lonRef, $latRef, $tagRef)= getNodePointers(); foreach my $nodeId(keys %$lonRef){ my @tags = @{$$tagRef{$nodeId}}; my $tagsString = ""; my $ruleRef = getNodeRule(\@tags); if(defined $ruleRef){ # draw disc first ! if(grep /yes/, $$ruleRef{'disc'}){ my $svgString = ""; if($$ruleRef{'discsvgstring'}ne ""){ $svgString = $$ruleRef{'discsvgstring'}; } else{ $svgString = "fill=\"$$ruleRef{'disccolor'}\" stroke=\"none\" fill-opacity=\"$$ruleRef{'discopacity'}\""; } drawCircle($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'discradius'}, 1, $svgString, 'nodes'); } if(grep /yes/, $$ruleRef{'circle'}){ my $svgString = ""; if($$ruleRef{'circlesvgstring'}ne ""){ $svgString = $$ruleRef{'circlesvgstring'}; } else{ $svgString = "fill=\"none\" stroke=\"$$ruleRef{'circlecolor'}\" stroke-width=\"$$ruleRef{'circlethickness'}\""; } drawCircle($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'circleradius'}, 1, $svgString, 'nodes'); } if(($$ruleRef{'size'}> 0)and($$ruleRef{'icon'}eq "none")){ my $svgString = ""; if($$ruleRef{'svgstring'}ne ""){ $svgString = $$ruleRef{'svgstring'}; } else{ $svgString = "fill=\"$$ruleRef{'color'}\""; } if($$ruleRef{'shape'}eq "circle"){ drawCircle($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes'); } elsif($$ruleRef{'shape'}eq "square"){ drawSquare($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes'); } elsif($$ruleRef{'shape'}eq "triangle"){ drawTriangle($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes'); } elsif($$ruleRef{'shape'}eq "diamond"){ drawDiamond($$lonRef{$nodeId}, $$latRef{$nodeId}, 1, $$ruleRef{'size'}, 0, $svgString, 'nodes'); } } if(($$ruleRef{'label'}ne "none")or($$ruleRef{'icon'}ne "none")){ my($labelText, $ref)= createLabel(\@tags, $$ruleRef{'label'}, $$lonRef{$nodeId}, $$latRef{$nodeId}); $labelText = labelTransform($labelText, $$ruleRef{'labeltransform'}); my $labelSize = $$ruleRef{'labelsize'}; my $labelColor = $$ruleRef{'labelcolor'}; my $labelFont = $$ruleRef{'labelfont'}; my $labelFontFamily = $$ruleRef{'labelfontfamily'}; my $labelBold = $$ruleRef{'labelbold'}; my $labelItalic = $$ruleRef{'labelitalic'}; my $labelHalo = $$ruleRef{'labelhalo'}; my $labelHaloColor = $$ruleRef{'labelhalocolor'}; my $icon = $$ruleRef{'icon'}; my $iconSize = $$ruleRef{'iconsize'}; my $svgText = createTextSVG($labelFontFamily, $labelFont, $labelBold, $labelItalic, $labelSize, $labelColor, $labelHalo, $labelHaloColor); placeLabelAndIcon($$lonRef{$nodeId}, $$latRef{$nodeId}, 0, $$ruleRef{'size'}, $labelText, $svgText, $icon, $iconSize, $iconSize, "nodes"); } # fill poi directory my $thing0 = $$ruleRef{'keyvalue'}; my($thing)=($thing0 =~ /.+=(.+)/); my $dirName = getValue("name", $$tagRef{$nodeId}); if((cv('poi')eq "1")and (defined $dirName)and ($$ruleRef{'direxclude'}eq "no") ){ $dirName .= "($thing)"; if(cv('grid')> 0){ my $sq = gridSquare($$lonRef{$nodeId}, $$latRef{$nodeId}, cv('grid')); if(defined $sq){ addToPoiHash($dirName, $sq); } } else{ # $poiHash{$dirName}= 1; addToPoiHash($dirName, undef); } } }# defined ruleref } } # ------------------------------------------------------------------------------------ sub createPoiDirectory{ my $poiName; my $poiFile; $poiName = cv('out'); $poiName =~ s/\.svg/\_pois.txt/; setConfigValue("poiname", $poiName); print "creating poi file $poiName ...\n"; open($poiFile, ">", $poiName)or die("can't open poi file $poiName\n"); my $ref = getPoiHash(); my %poiHash = %$ref; if(cv('grid')eq "0"){ foreach my $poi(sort keys %poiHash){ $poi = replaceHTMLCode($poi); print $poiFile "$poi\n"; }} else{ foreach my $poi(sort keys %poiHash){ $poi = replaceHTMLCode($poi); print $poiFile "$poi\t"; foreach my $square(sort keys %{$poiHash{$poi}}){ print $poiFile "$square "; } print $poiFile "\n"; }} close($poiFile); } 1;