It Jam 2009

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

description

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

Transcript of It Jam 2009

Page 1: It Jam 2009

OpenStreetMap and Python

Andrii V. Mishkovskyi

October 27, 2009

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

Page 2: It Jam 2009

What is OpenStreetMap?

In short:

The Wikipedia ofMaps

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

Page 3: It Jam 2009

What is OpenStreetMap?

FreeCC-by-SAConstantly evolvingEasy to start

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

Page 4: It Jam 2009

Languages used

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

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

Page 5: It Jam 2009

Python tools

bulk upload.pyPythonOsmApiCloudMade’s Python APIMapnik

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

Page 6: It Jam 2009

Outline

MapnikOther tools

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

Page 7: It Jam 2009

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

Page 8: It Jam 2009

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)

Page 9: It Jam 2009

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)

Page 10: It Jam 2009

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)

Page 11: It Jam 2009

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)

Page 12: It Jam 2009

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’)

Page 13: It Jam 2009

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’)

Page 14: It Jam 2009

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’)

Page 15: It Jam 2009

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’)

Page 16: It Jam 2009

Wait for it...

Page 17: It Jam 2009
Page 18: It Jam 2009

Ta-da!

Page 19: It Jam 2009

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’)

Page 20: It Jam 2009

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’)

Page 21: It Jam 2009

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’)

Page 22: It Jam 2009

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’)

Page 23: It Jam 2009

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’)

Page 24: It Jam 2009

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’)

Page 25: It Jam 2009

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’)

Page 26: It Jam 2009
Page 27: It Jam 2009
Page 28: It Jam 2009

Styles are cool!

Page 29: It Jam 2009

Outline

MapnikOther tools

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

Page 30: It Jam 2009

bulk upload.py

Mass imports of dataPerfect overview of working with OSMAPI

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

Page 31: It Jam 2009

PythonOsmApi

Thin wrapper over HTTP OSM APIAllows editing OSM data

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

Page 32: It Jam 2009

CloudMade API

Shameless plug

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

Page 33: It Jam 2009

CloudMade API

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

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

Page 34: It Jam 2009

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

Page 35: It Jam 2009

Links

osm.orgmapnik.orgcloudmade.comwiki.osm.org

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