Skip to content
This repository

Cascading Sheets Of Style for Mapnik

Octocat-spinner-32 cascadenik bumped to 2.6.6
Octocat-spinner-32 data Bumped to 2.6.2 with elimination of local dependency on test.shp for …
Octocat-spinner-32 doc styling a thematic map from remote geocommons geojson
Octocat-spinner-32 openstreetmap use default prefix in 'remapniking osm' style
Octocat-spinner-32 .gitignore add gitignore file
Octocat-spinner-32 AUTHORS.txt Added proper CHANGELOG and AUTHORS entries, made a new release
Octocat-spinner-32 CHANGELOG.md update dash array and requirements into the CHANGELOG
Octocat-spinner-32 INSTALL.md Moved README to markdown and added a note about running tests
Octocat-spinner-32 LICENSE.txt update License date
Octocat-spinner-32 MANIFEST.in set up for Cascadenik 0.1.0 release
Octocat-spinner-32 Makefile Moved the One True Copy of the version number to cascadenik.__version__
Octocat-spinner-32 README.md Added sample variables to README
Octocat-spinner-32 cascadenik-compile.py Bumped to version 2.6.0 with addition of --style option to cascadenik…
Octocat-spinner-32 cascadenik-extract-dscfg.py Renamed special parameter 'base' to 'template' in datasource config t…
Octocat-spinner-32 cascadenik-style.py make cascadenik-style.py executable
Octocat-spinner-32 example.cfg Handle local overrides from a config file for datasources.
Octocat-spinner-32 example.mml to_mapnik now includes datasources. Tests pass - we need a local shap…
Octocat-spinner-32 example.mss oop
Octocat-spinner-32 example_dscfg.mml Handle local overrides from a config file for datasources.
Octocat-spinner-32 requirements.txt List cssutils as a dependency
Octocat-spinner-32 setup.py Setuptools doesn't actually have a clue how to install PIL
README.md

Cascadenik

Cascadenik implements cascading stylesheets for Mapnik.

It’s an abstraction layer and preprocessor that converts special, CSS-like syntax into Mapnik-compatible style definitions. It’s easier to write complex style rules using the alternative syntax, because it allows for separation of symbolizers and provides a mechanism for inheritance.

Cascadenik supports many of Mapnik’s features in a simple declarative form:

/* Define a few colors */
@black: #000;
@orange: #f90;

/* Start with a white background */
Map
{
    map-bgcolor: #fff;
}

/* Draw roads as orange lines */
#roads
{
    /* Usually, 3px wide */
    line-width: 3;
    line-color: @orange;

    /* Make the important ones wider */
    &[kind=major] { line-width: 4 }
    &[kind=highway] { line-width: 5 }

    /* Add the road names in black */
    name
    {
        text-placement: line;
        text-face-name: "DejaVu Sans Book";
        text-fill: @black;
        text-size: 12;
    }
}

See more examples at https://github.com/mapnik/Cascadenik/wiki/Examples.

Usage

See INSTALL.md for installation instructions.

See the doc/ folder for more usage examples.

Unroll the rules in example.mss and show their cascade order:

% cascadenik-style.py example.mss > example-ordered-unrolled.mss

Compile example.mml into a Mapnik-suitable XML file:

% cascadenik-compile.py example.mml example-compiled.xml

Render a MML file directly to an image using nik2img.py:

% nik2img.py example.mml example.png
Something went wrong with that request. Please try again.