Skip to content

Mappy/pycnik

Folders and files

NameName
Last commit message
Last commit date

Latest commit

648202a · Jan 7, 2016

History

77 Commits
Jan 5, 2016
Aug 3, 2012
Dec 4, 2012
Aug 3, 2012
Jan 5, 2016
Feb 23, 2015
Aug 3, 2012
Dec 5, 2012
Oct 23, 2013
Oct 25, 2012
Jan 4, 2016

Repository files navigation

pycnik

https://secure.travis-ci.org/Mappy/pycnik.png https://pypip.in/v/pycnik/badge.png https://pypip.in/d/pycnik/badge.png Bitdeli badge

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