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

It Jam 2009

May 12, 2015

Download

Technology

IT Jam 2009 presentation, covering usage of Python with and in OpenStreetMap.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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