Upload
andrii-mishkovskyi
View
911
Download
2
Tags:
Embed Size (px)
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