Everything about OpenStreetMap.
lanes:bus:forward
.A simplified example of OSM data represented in XML.
<node id="42437959" visible="true" version="12" changeset="13150866"
timestamp="2012-09-18T02:14:34Z" user="RoadGeek_MD99" uid="475877"
lat="40.7229823" lon="-73.9885488">
<tag k="highway" v="traffic_signals"/>
</node>
<node id="42443513" visible="true" version="5" changeset="5155439"
timestamp="2010-07-07T00:47:51Z" user="Dylan Semler" uid="31855"
lat="40.7232770" lon="-73.9884510">
<tag k="highway" v="traffic_signals"/>
</node>
<way id="5672851" visible="true" version="37" changeset="41811184"
timestamp="2016-08-30T20:49:09Z" user="infinitesunrise" uid="4434293">
<nd ref="42437959"/>
<nd ref="42443513"/>
<tag k="highway" v="primary"/>
<tag k="name" v="1st Avenue"/>
<tag k="oneway" v="yes"/>
</way>
<relation id="1077653" visible="true" version="3" changeset="21582260"
timestamp="2014-04-09T04:29:57Z" user="lxbarth" uid="589596">
<member type="way" ref="22898643" role="from"/>
<member type="way" ref="34080174" role="to"/>
<member type="node" ref="42428201" role="via"/>
<tag k="restriction" v="only_straight_on"/>
<tag k="type" v="restriction"/>
</relation>
OSM Cheat Sheet: tags and keyboard shortcuts.
Names:
name
, the primary tag used for common names;ref
, reference numbers or codes.alt_name
, less common names.Road classification: highway
is the main tag (confusingly) used to classify any kind of road, street or path:
motorway
(one-directional by default);
motorway_link
(speed depends on curvature).trunk
(high capacity road without limited access), primary
, secondary
, tertiary
;
trunk_link
, primary_link
, secondary_link
, tertiary_link
.residential
(in residential area), unclassified
(minor public roads, non-residential);living_street
(slow traffic has absolute right-of-way), service
(in private property or parking lots), pedestrian
(normally forbidden for motor vehicles), road
(classification unknown);traffic_signals
, stop
(stop signs), bus_stop
, mini_roundabout
;area=yes
or type=multipolygon
.Other tags that can classify ways as part of a road network:
lanes
(lanes:forward
, lanes:backward
) indicate number of lanes (in a given direction);turn:lanes
(left, through, right) and parking:lane
indicate turning lanes and parking lanes;bridge
, tunnel
for bridges and tunnels;junction=roundabout
, a single lane roundabout (one-directional);Restrictions:
access
additionally describes legal access to an entity via all or particular forms of transport.maxspeed
, maximum legal speed limit (default in kilometers per hour).oneway
(yes, no, -1).hgv
, heavy goods vehicle.Spatial relation:
is_in
;place
(continent, country, state, region, county, city, town, village, hamlet, suburb, island);boundary=administrative
and admin_level=8
;barrier
, a physical structure that blocks or impedes movement (toll_booth, etc).
Turn restriction: member roles from
, to
, via
, and tag type=restriction
.
restriction
no_right_turn
, no_left_turn
, no_u_turn
, no_straight_on
;only_right_turn
, only_left_turn
, only_straight_on
;no_entry
, no_exit
;except
, exception by vehicle type.day_on
, day_off
, hour_on
, hour_off
.Multipolygon: member roles outer
, inner
, and tag type=multipolygon
.
Other relations: route (a collections of ways) type=route
, boundary.
OpenStreetMap.org provides weekly dump of its entire database in text and binary formats. Regional extracts are available and periodically updated from third parties. GeoFabrik.de provides continent, country and sub-country region extracts, also available in Shapefile. BBBike.org provides extracts for cities and regions as shapefile, CSV, SVG, OPL and formats for offline navigation (Garmin, Navit, maps.me, OsmAnd, mapsforge), also offers custom bounding box or polygon extracts within 24M sq km and 768MB file size. BBBike.org extracts set version of all map entities to -1 and all timestamps to 1969, which can cause trouble.
Formats:
.osm
, an XML format..pbf
(Protocol-buffer Binary Format): the primary binary format based on protocol buffers with <50% the size of XML format..o5m
, a flat binary format that nobody uses..opl
(Object Per Line): a preliminary format created by libosmium where each object is on its own line, about half the size of OSM XML files.Protocol buffers is a language-neutral, platform-neutral extensible mechanism for serializing structured data. Delta coding and variable-byte coding are applied throughout.
Characteristics of OSM PBF:
For better compression and processing speed of OSM data, Conveyal invented a binary format called Vanilla Extract eXchange format (.vex).
Converting map data between OSM and external formats:
created_by=GPSBabel-1.5.2
).ogr2ogr
can write OSM data to any supported format.OpenStreetMap.org services:
/<type>/<id>
;/api/0.6
;/history
./edit
;Overpass API is a read-only API for querying an OpenStreetMap database and extracting features over the web. Overpass Turbo is a Web frontend of Overpass API.
Metro Extracts by Mapzen: bounding box extracts of popular cities and regions as Shapefile and GeoJSON files split by geometry type of features (lines, points, polygons) or by logical groups (Roads, etc) of OpenStreetMap tags (no relation); coastline geometries of each area are also available in Shapefile.
OSM turn restrictions:
osmosis
is a command line Java application for processing OSM data, which can extract data inside a bounding box or polygon.
osmconvert
can convert and process OSM files faster than osmosis but has less functionality; it has a few special functions.
osmium
also has a command line tool to convert file format, apply changeset, and extract historical data.
JOSM, Java OpenStreetMap, is the offline editor of OSM data, with many plugins. Features: validator feature can check and fix invalid data. JOSM plugins for fixing missing turn restrictions: ScoutSigns (road signs by Scout users), ImproveOsm (missing geometries and turn restrictions, by Scout), turnrestrictions (by skobbler).
Merkaartor is another OpenStreetMap editor, written in C++.
KeepRight, data consistency checks (quality assurance) for OSM.
PostgreSQL Loader: osm2pgsql
; osm2pgrouting
, imports OSM topology to PostgreSQL database; other java programs.
Programming Frameworks for accessing, processing, map rendering (static, interactive), geocoding, and navigation with OpenStreetMap data. Debian GIS Blend meta-package for OpenStreetMap already include many of these tools and libraries.
Accessing:
osm-common
(Java): accessing, processing, geocoding; supports Overpass.osmapi
(Python): Python wrapper for the OpenStreetMap API.osmaR
(R): access OpenStreetMap data from file or API, and convert to other classes.Data processing / parsing:
pbf2osm
, osmpbf
; LibOsm
(SQLlite); osmium
;Gosmparse
, osmpbf
;osmosis
, osm4j
, BasicOSMParser
, OSMemory
;imposm
(import OSM to PostgreSQL/PostGIS), osmread
;Navigation:
Geocoding: Gisgraphy (Java)
Map rendering: