User:Moresby/Understanding Mapnik/Specifying line colour and width

From OpenStreetMap Wiki
Jump to navigation Jump to search
Understanding Mapnik
A Mapnik tutorial
Starting with Python
Using XML and CSS
CartoCSS and PostGIS
031-lines-colour.png - roads shown with coloured lines

Se far we have drawn lines using just the default settings: solid black lines one pixel wide. We can choose the colour and width of our lines relatively easily by specifying these when we create our LineSymbolizer.

#!/usr/bin/python

# Load the Python mapnik libraries.
import mapnik

# Create a new map.
m = mapnik.Map(480, 320)

# Set the background colour.
m.background = mapnik.Color('ghostwhite')

# Create a line symbolizer.
line_symbolizer = mapnik.LineSymbolizer(mapnik.Color('green'), 2)

# Create a new rule and add the symbolizer.
r = mapnik.Rule()
r.symbols.append(line_symbolizer)

# Create a new style and add the rule.
s = mapnik.Style()
s.rules.append(r)

# Add the style to the map.
m.append_style('basic_style', s)

# Specify that our data is coming from a CSV file called "data-roads.csv".
ds = mapnik.CSV(file='data-roads.csv')

# Create a new layer for the map, called "main_map" and add the data
#   source and style to that layer.
l = mapnik.Layer('main_map')
l.datasource = ds
l.styles.append('basic_style')

# Add the layer to the map.
m.layers.append(l)

# Zoom to the part of the map we are interested in.
m.zoom_to_box(mapnik.Box2d(0, 0, 480, 320))

# Save the map as a PNG image.
mapnik.render_to_file(m, '031-lines-colour.png', 'png')

Save this program in a file called 031-lines-colour.py and run it by typing:

python 031-lines-colour.py

You should see no error messages, and you should see a new file in your working directory called 031-lines-colour.png. This is a new map image, and should be a light-coloured rectangle 480 pixels wide by 320 pixels high, with a series of interconnected green lines, as shown above.