It Jam 2009

Preview:

DESCRIPTION

IT Jam 2009 presentation, covering usage of Python with and in OpenStreetMap.

Citation preview

OpenStreetMap and Python

Andrii V. Mishkovskyi

October 27, 2009

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 1 / 23

What is OpenStreetMap?

In short:

The Wikipedia ofMaps

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 2 / 23

What is OpenStreetMap?

FreeCC-by-SAConstantly evolvingEasy to start

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 3 / 23

Languages used

Ruby siteC++ rendering, editors, utilitiesPython rendering, utilitiesJava utilities, editorsPHP wiki

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 4 / 23

Python tools

bulk upload.pyPythonOsmApiCloudMade’s Python APIMapnik

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 5 / 23

Outline

MapnikOther tools

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 6 / 23

Overview

Render toolWritten in C++Boost.Python for bindingsLots of input pluginsPNG, JPG, SVG, PDF output

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 7 / 23

Example, part 1import mapnikmap = mapnik.Map()map.background = mapnik.Color(’steelblue’)rule = mapnik.Rule()rule.symbols.append(

mapnik.PolygonSymbolizer(mapnik.Color(’#f2eff9’)))

rule.symbols.append(mapnik.LineSymbolizer(

mapnik.Color(’rgb(50%,50%,50%)’), 0.1))style = mapnik.Style()style.rules.append(rule)map.append_style(’Base’, style)

Example, part 1import mapnikmap = mapnik.Map()map.background = mapnik.Color(’steelblue’)rule = mapnik.Rule()rule.symbols.append(

mapnik.PolygonSymbolizer(mapnik.Color(’#f2eff9’)))

rule.symbols.append(mapnik.LineSymbolizer(

mapnik.Color(’rgb(50%,50%,50%)’), 0.1))style = mapnik.Style()style.rules.append(rule)map.append_style(’Base’, style)

Example, part 1import mapnikmap = mapnik.Map()map.background = mapnik.Color(’steelblue’)rule = mapnik.Rule()rule.symbols.append(

mapnik.PolygonSymbolizer(mapnik.Color(’#f2eff9’)))

rule.symbols.append(mapnik.LineSymbolizer(

mapnik.Color(’rgb(50%,50%,50%)’), 0.1))style = mapnik.Style()style.rules.append(rule)map.append_style(’Base’, style)

Example, part 1import mapnikmap = mapnik.Map()map.background = mapnik.Color(’steelblue’)rule = mapnik.Rule()rule.symbols.append(

mapnik.PolygonSymbolizer(mapnik.Color(’#f2eff9’)))

rule.symbols.append(mapnik.LineSymbolizer(

mapnik.Color(’rgb(50%,50%,50%)’), 0.1))style = mapnik.Style()style.rules.append(rule)map.append_style(’Base’, style)

Example, part 2

layer = mapnik.Layer(’world’,"+proj=latlong +datum=WGS84")

layer.datasource = mapnik.Shapefile(file=’boundaries.shp’)

layer.styles.append(’Base’)map.layers.append(layer)map.zoom_to_box(layer.envelope())mapnik.render_to_file(map, ’world.png’, ’png’)

Example, part 2

layer = mapnik.Layer(’world’,"+proj=latlong +datum=WGS84")

layer.datasource = mapnik.Shapefile(file=’boundaries.shp’)

layer.styles.append(’Base’)map.layers.append(layer)map.zoom_to_box(layer.envelope())mapnik.render_to_file(map, ’world.png’, ’png’)

Example, part 2

layer = mapnik.Layer(’world’,"+proj=latlong +datum=WGS84")

layer.datasource = mapnik.Shapefile(file=’boundaries.shp’)

layer.styles.append(’Base’)map.layers.append(layer)map.zoom_to_box(layer.envelope())mapnik.render_to_file(map, ’world.png’, ’png’)

Example, part 2

layer = mapnik.Layer(’world’,"+proj=latlong +datum=WGS84")

layer.datasource = mapnik.Shapefile(file=’boundaries.shp’)

layer.styles.append(’Base’)map.layers.append(layer)map.zoom_to_box(layer.envelope())mapnik.render_to_file(map, ’world.png’, ’png’)

Wait for it...

Ta-da!

IRL example, part 1

import mapnikprojection = mapnik.Projection(

"+proj=merc +a=6378137 +b=6378137 ""+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 ""+no_defs +over +lat_ts=0.0 +units=m")

map = mapnik.Map(900, 600)mapnik.load_map(map, ’/path/to/style.xml’)

IRL example, part 1

import mapnikprojection = mapnik.Projection(

"+proj=merc +a=6378137 +b=6378137 ""+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 ""+no_defs +over +lat_ts=0.0 +units=m")

map = mapnik.Map(900, 600)mapnik.load_map(map, ’/path/to/style.xml’)

IRL example, part 1

import mapnikprojection = mapnik.Projection(

"+proj=merc +a=6378137 +b=6378137 ""+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 ""+no_defs +over +lat_ts=0.0 +units=m")

map = mapnik.Map(900, 600)mapnik.load_map(map, ’/path/to/style.xml’)

IRL example, part 1

import mapnikprojection = mapnik.Projection(

"+proj=merc +a=6378137 +b=6378137 ""+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 ""+no_defs +over +lat_ts=0.0 +units=m")

map = mapnik.Map(900, 600)mapnik.load_map(map, ’/path/to/style.xml’)

IRL example, part 2

coords = [(30.44, 50.455), (30.465, 50.459)]coords = [mapnik.Coord(*coord)

for coord in coords]coords = [projection.forward(coord)

for coord in coords]bbox = mapnik.Envelope(*coords)map.zoom_to_box(bbox)mapnik.render_to_file(

map, ’whereweare.png’, ’png’)

IRL example, part 2

coords = [(30.44, 50.455), (30.465, 50.459)]coords = [mapnik.Coord(*coord)

for coord in coords]coords = [projection.forward(coord)

for coord in coords]bbox = mapnik.Envelope(*coords)map.zoom_to_box(bbox)mapnik.render_to_file(

map, ’whereweare.png’, ’png’)

IRL example, part 2

coords = [(30.44, 50.455), (30.465, 50.459)]coords = [mapnik.Coord(*coord)

for coord in coords]coords = [projection.forward(coord)

for coord in coords]bbox = mapnik.Envelope(*coords)map.zoom_to_box(bbox)mapnik.render_to_file(

map, ’whereweare.png’, ’png’)

Styles are cool!

Outline

MapnikOther tools

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 18 / 23

bulk upload.py

Mass imports of dataPerfect overview of working with OSMAPI

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 19 / 23

PythonOsmApi

Thin wrapper over HTTP OSM APIAllows editing OSM data

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 20 / 23

CloudMade API

Shameless plug

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 21 / 23

CloudMade API

Access to CloudMade’s servicesRouting, geocoding, tiles . . .More coming soon

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 21 / 23

So. . .

OpenStreetMap is the biggest datadump everMapnik rulesAPIs ruleLots of work yet to be done

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 22 / 23

Links

osm.orgmapnik.orgcloudmade.comwiki.osm.org

Andrii V. Mishkovskyi () OpenStreetMap and Python October 27, 2009 23 / 23

Recommended