Shapefile to SVG renderer in Perl
Perl Shell
Switch branches/tags
Nothing to show


Last updated $Date: 2012/09/11 17:08:00 $

"" is a Perl program (script, whatever) that renders one or
more ESRI Shapefiles in an SVG (Scalable Vector Graphics) file.  The SVG
file created can be subsequently edited with an SVG editor like Inkscape
to ammend the results of the rendering and to add finishing touches.

These external Perl modules (available from CPAN) are required by this


The Geo::Proj4 module requires that the Proj4 library be pre-installed.
That can be downloaded from

No other external dependencies should exit.


Manifest:   The perl program A shellscript containing an example use of the program
    README:        You're reading it now.
    FEATURES:      A list of features in the program
    TODO:          A list of features that may be coming soon, or which
                   may just be pie in the sky.


Command line arguments and parameters (seen with "-h" option):

Usage: $0 [-x xsize] [-y ysize] [-l] [-p precision] [-d deltamin] [-T srs] [-S srs] [-C xmin,ymin:xmax,ymax] inputspec [inputspec ...]\n" ;

    -l lists the names of the attribute fields in the shapefile and
       then exits.

    -x xsize is image width (in points?); defaults to 576

    -y ysize is image height (in points?) 720

    -T srs is for Target projection spatial reference system in
       Proj4 format; defaults to rectilinear lat/lon

    -S srs is the default Source spatial reference system in Proj4
       format; defaults to rectilinear lat/lon

    -C xmin,ymin:xmax,ymax crops the results to the bounding box
       defined by opposing corners in the target coordinate system

    -p precision is the number of decimal points used in the SVG
       for position coordinates; defaults to 1

    -d deltamin is the minimum change in either x or y from the
       previously plotted point in a line or polygon for the next one
       to be plotted.  This reduces file size by omitting points that
       are very, very close to each other.  Good results are achieved
       with -p1 -d0.5, which are the defaults.

    -v for verbose commentary on stderr as the program runs

    An "inputspec" contains a shapefile path (with or without .shp)
    and a list of processing/rendering options separated by commas
    but no spaces.  (Spaces are okay in some options where needed,
    but not between.)  Options contain a name and a value joined by
    an equal signe: name=value.  Currently supported options:

        Option    Value
        --------  -------------------------------------------------- 
        srs       Source SRS for the shapefile, in Proj4 format

        group     Name of an attribute to group objects by

        grep      Name of an attribute by which to select records for
                  inclusion, and a pcre regex by which to choose them,
                  joined with a tilde.  E.g.: "grep=FIPSCODE~(04)|(35)"
                  might choose records for Arizona and New Mexico if
                  the records has a field named FIPSCODE that contains
                  the state FIPS code.

        ptype     Built-in shape name to plot point data as, or to plot
                  just the center point (vertex centroid) of polygon
                  shapes.  Valid values include "square", "diamond",
                  "star4", and "star5".

        style     Additional or replacement SVG "style" elements for
                  rendering this shapefile E.g.: "style=stroke: #800000;
                  stroke-width: 1.5; fill: #ffff80"

        rad       Radius for the circle drawn for point shapes.
                  Only circles are currently used.

        nodraw    Set to "true" or "1" to inhibit rendering of the
                  shapefile; useful for influencing the scale when
                  rendering other files, as when creating layers

        colorby   An attribute name followed by a list of pcre regexes
                  and color specs; the fill for each shape is set to
                  the color associated with the first matching regex.
                  E.g.: "colorby="RANGE;m/0 to 50/#cfef7f;m/50 to
                  100/#a1f574;m/100 to 200/#95fbcb" In this example,
                  the RANGE field contains strings like "0 to 50".
                  Full-blown regexes are possible, though.

        same      Name of an attribute to set the fill color of the
                  shapes by; all shapes having the same value get the
                  same unique color.  The color sequence is currently
                  hard-coded.  The attribute can be numeric or not.
                  A key legend is created out of view in the SVG image;
                  it can be edited as desired and moved into a suitable
                  position with an SVG editor in post-processing.

        range     Atributename;color1;color2[;log]
                  The range of values in the named attribute are
                  colored with continuous range of colors from color1
                  for the lowest value to color2 for the highest value.
                  The attribute is treated as numeric.  If the optional
                  log option is given, a logarighmic scale is used,
                  linear otherwise.

Example inputspec: 
Rivers.shp,grep="NAME~(Red)|(Brazos)|(Pecos)",style="stroke:#1821DE;stroke-width:1",srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"