134 lines
5.1 KiB
Perl
134 lines
5.1 KiB
Perl
#
|
|
# 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 <http://www.gnu.org/licenses/>
|
|
#
|
|
|
|
|
|
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;
|
|
|
|
|