#!/usr/bin/env python
import mapnik
# City of Vancouver orthophotos are NAD83:
projNAD83 = '+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs'
# GPX files are EPSG:4326, i.e. WGS84:
projWGS84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
map = mapnik.Map(1024, 512, projNAD83)
map.background = mapnik.Color(0, 0, 0, 0)
map.aspect_fix_mode = mapnik.aspect_fix_mode.GROW_BBOX
style = mapnik.Style()
rule = mapnik.Rule()
rasterSymbolizer = mapnik.RasterSymbolizer()
rule.symbols.append(rasterSymbolizer)
polygonSymbolizer = mapnik.PolygonSymbolizer()
polygonSymbolizer.fill_opacity = 0.0
rule.symbols.append(polygonSymbolizer)
lineSymbolizer = mapnik.LineSymbolizer(mapnik.Color('red'), 1.0)
rule.symbols.append(lineSymbolizer)
style.rules.append(rule)
map.append_style('My Style', style)
# City map raster layer from geotiff.
lyrCity = mapnik.Layer('City', projNAD83)
# Gdal uses the associated .tfw file containing projection/extent information.
# Note that the scale factors in the .tfw need to be updated if the image has been resized.
lyrCity.datasource = mapnik.Gdal(file='city_vancouver_utm10_2011.tif')
lyrCity.styles.append('My Style')
# GPS track from GPX file.
lyrTrack = mapnik.Layer('Track', projWGS84)
lyrTrack.datasource = mapnik.Ogr(file = 'riley-park-perimeter-run.gpx', layer = 'tracks')
lyrTrack.styles.append('My Style')
map.layers.append(lyrCity)
map.layers.append(lyrTrack)
map.zoom_all()
mapnik.render_to_file(map, 'test.png', 'png')