skip to navigation
skip to content

Not Logged In

pycnik 1.3.2.1

Tool for generating Mapnik's stylesheets from python code

pycnik

https://secure.travis-ci.org/Mappy/pycnik.png

A simple Translator from Python code (with coding conventions) to Mapnik XML stylesheet.

  • features:
    • allow using exotic number of zoom levels and tile sizes (computes scales denominators)
    • provides a mechanism for inheritance
    • automatically add cache-feature attribute when using more than 2 styles
  • caveats:

Install Pycnik

$ git clone https://github.com/Mappy/pycnik.git
$ cd pycnik
$ python setup.py install

Or via pip:

$ pip install pycnik

Dependencies:

  • python-mapnik (mapnik >= 2.x)
  • lxml

Testing

Dependencies:

$ pip install -r requirements/test.pip

To run the tests with nose:

$ nosetests -v

Getting started

Pycnik uses dynamic variable declaration, so you have to use the same keywords as the xml declaration syntax.

example.py:

from pycnik.model import *

BACKGROUND_COLOR = 'rgb(255,255,220)'

NATURAL_RASTER = {
    "type": "gdal",
    "file": "natural_earth.tif"
}

DATABASE_PARAM = {
    "dbname": "database",
    "estimate_extent": "true",
    "host": "0.0.0.0",
    "password": "******",
    "port": "5432",
    "type": "postgis",
    "user": "mapuser",
    "srid": "4326",
}

################
# MAP DEFINITION
################
Map.background_color = BACKGROUND_COLOR
Map.srs = "+init=epsg:4326"
Map.minimum_version = "2.0"
Map.font_directory = "fonts"
Map.buffer_size = 128

########
# LAYERS
########
natural_earth = Layer("natural_earth")
natural_earth.datasource = NATURAL_RASTER

bnd = Layer("country boundaries")
bnd.datasource = DATABASE_PARAM
bnd.table = "schema.boundaries"

########
# STYLES
########
natural_earth.style()[:3] = {
    RASTER: {
        'scaling': 'bilinear'
    }
}

bnd.style("blue")[0:19] = {
    LINE: {
        'fill': 'rgb(255,0,0)',
        'stroke-width': '4'
    },
    'filter': "[countrycode]='ESP'"
}

# change the stroke width from level 10 to 15
# the `filter` and `fill` attributes are preserved
bnd.style("blue")[10:15] = {
    LINE: {'stroke-width': '12'}}

You can see more examples in the test/resources directory.

Generate mapnik XML

$ pycnik example.py -o example.xml

Changelog

1.4 (current)

  • Nothing yet

1.3.2 (2012-12-05)

  • allowing any attributes for layer tag

1.3.1 (2012-10-25)

  • Updated documentation

1.3 (2012-10-04)

  • Removed "zoom" comment in tag scaledenominator (for mapnik 2.1)
  • More tests

1.2 (2012-09-11)

  • Added copy_style() helper

1.1 (2012-09-10)

  • Support many symbolizer with the same type in rule
  • More tests

1.0 (2012-08-07)

  • Initial release
 
File Type Py Version Uploaded on Size
pycnik-1.3.2.1.tar.gz (md5) Source 2012-12-05 10KB
  • Downloads (All Versions):
  • 1 downloads in the last day
  • 28 downloads in the last week
  • 173 downloads in the last month