#!/usr/bin/perl # # $Id: map.perl 24 2008-10-25 17:21:27Z klaus $ # # create a simple SVG map for Tasmania # # Klaus Förster ######################################## use strict; use CGI; use DBI; my $q = new CGI; $q->import_names('q'); # content will be collected within my $result; # predefine styles my $styles = { 'lake' => 'fill="lightskyblue" stroke="deepskyblue" stroke-width="30"', 'stream' => 'fill="none" stroke="deepskyblue" stroke-width="120"', 'town' => 'fill="crimson" stroke="black" stroke-width="50"', 'towntext' => 'font-family="Arial" font-size="3500" fill="white"', 'roadsec' => 'fill="none" stroke="gray" stroke-width="100"', 'roadprim' => 'fill="none" stroke="gray" stroke-width="300" ', 'rail' => 'fill="none" stroke="brown" stroke-width="200" stroke-dasharray="1000 500"', }; # connect to database my $dbh = DBI->connect("DBI:Pg:dbname=database;host=hostname", "username", "password"); # build query, take styles into account, set precision to 0 my $sql = qq* SELECT 'poly','lake',gid,nam,AsSvg(the_geom,1,0), -1 AS zindex FROM tasmania.inwatera UNION SELECT 'line','stream',gid,nam,AsSvg(the_geom,1,0), -0.5 AS zindex FROM tasmania.watercl WHERE hyc=8 UNION SELECT 'poly','town',gid,nam,AsSvg(the_geom,1,0), 0 AS zindex FROM tasmania.builtupa UNION SELECT 'line','rail',gid,' ',AsSvg(the_geom,1,0), 0 AS zindex FROM tasmania.railrdl UNION SELECT 'line','roadsec',gid,' ',AsSvg(the_geom,1,0), 0 AS zindex FROM tasmania.roadl WHERE rtt=15 UNION SELECT 'line','roadprim',gid,' ',AsSvg(the_geom,1,0), 0 AS zindex FROM tasmania.roadl WHERE rtt=14 UNION SELECT 'symbol','aero',gid,nam,AsSvg(the_geom,1,0), 0 AS zindex FROM tasmania.aerofacp UNION SELECT 'text','towntext',gid,nam,AsSvg(the_geom,1,0), 0 AS zindex FROM tasmania.builtupp ORDER BY zindex *; # perpare query and execute my $sth = $dbh->prepare($sql); $sth->execute; # parse results and create svg-code while (my @row = $sth->fetchrow) { if ($row[0] eq "poly") { $result .= qq*\n*; } elsif ($row[0] eq "line") { $result .= qq*\n*; } elsif ($row[0] eq "text") { $result .= qq*$row[3]\n*; } elsif ($row[0] eq "symbol") { $result .= qq*\n*; } else { # enough for now ;-) } } # say good bye to database $sth->finish(); $dbh->disconnect(); # print header if needed if (!$q::noheader) { print $q->header("image/svg+xml"); } # print out code print qq* $result *;