Some buses in San Francisco.
An OpenStreetMap Visualization Toolkit for Python
OSMViz is a small set of Python tools for retrieving and using OpenStreetMap (OSM) images (actually, Mapnik images served by Slippy Map). Its original purpose was to draw a bunch of things moving around on the map, which has been somewhat generalized and expanded.
With OSMViz you can:
- Grab appropriate rendered OSM tiles from an OSM server of your choosing
- Patch tiles together into a bigger map
- Easily animate stuff on that map (requires pygame)
A note about OpenStreetMap maps
If you choose to pull tiles from the openstreetmap.org server, then there are some things you should know:
- These tiles have a usage policy, available here.
- These tiles are (c) OpenStreetMap and contributors, CC-BY-SA
Using OSM Viz
The code below will show a train running across the USA. Choo choo!
from osmviz.animation import TrackingViz, Simulation # Define begin/end points, duration, and icon for our train start_lat,start_lon = (45.77,-68.65) # Northeast end_lat,end_lon = (30.05,-118.25) # Southwest begin_time, end_time = 0, 60 # In 60 seconds! image_f = "images/train.png" # Define bounds for the train and zoom level, how much map do we show? bound_ne_lat,bound_ne_lon = (46,-68.5) bound_sw_lat,bound_sw_lon = (30,-119) zoom = 6 # OSM zoom level # Define an interpolater to create animation points def locAtTime(t): if t < 0: return start_lat,start_lon if t > 60: return end_lat,end_lon frac = t/60.0 interp_lat = start_lat + frac * (end_lat-start_lat) interp_lon = start_lon + frac * (end_lon-start_lon) return interp_lat,interp_lon # Create a TrackingViz viz = TrackingViz("Continental Espresso", image_f, locAtTime, (begin_time,end_time), (bound_sw_lat,bound_ne_lat,bound_sw_lon,bound_ne_lon), 1) # Drawing order # Add our TrackingViz to a Simulation and then run the simulation sim = Simulation([viz,],,0) # ([actor vizs], [scene vizs], initial time) sim.run(speed=1,refresh_rate=0.1,osmzoom=zoom)
While the animation is running, you can control it as follows:
- Mousing over the icon displays its label ("Continental Espresso")
- Up/down arrows increase/decrease the speed of simulation (can go backwards in time)
- Left/right arrows set simulation to begin/end of the time window
- Space bar sets the speed to zero
- Escape key exits.
To run it yourself you need to have an existing "images/train.png" as well as an empty "maptiles/" directory. These already exist in the "test" directory in the source download; in fact one of the included tests is to show the same train.
- Python (tested using Python 2.5.x)
- Animations require Pygame (tested using Pygame 1.9.1)
- Image construction requires PIL (tested using PIL 1.1.6)