Routino : Data
A router relies on data to be able to find a route.
The data that is collected by the OpenStreetMap project consists of
nodes, ways and relations.
A node is a point that has a latitude and longitude and
attributes that describe what type of point it is (part of a way
or a place of interest for example).
A way is a collection of nodes that when joined together define
something (for example a road, a railway, a boundary, a
building, a lake etc). The ways also have attributes that define
them (speed limits, type of road and restrictions for example).
A relation is a collection of items (usually ways) that are
related to each other for some reason (highways that make up a
route for example).
The OpenStreetMap Wiki explains the data much better than I can.
The information that is needed by a routing algorithm is only a subset
of the information that is collected by the OpenStreetMap project. For
routing what is required is information about the location of roads (or
other highways), the connections between the highways and the
properties of those highways.
Location of highways (nodes)
The locations of things is provided by the nodes from the
OpenStreetMap data. The nodes are the only things that have
coordinates in OpenStreetMap and everything else is made up by
reference to them. Not all of the nodes are useful, only the
ones that are part of highways. The location of the nodes is
stored but none of the other attributes are currently used by
Location of highways (ways)
The location of the highways is defined in the OpenStreetMap
data by the ways. Only the highway ways are useful and the other
ways are discarded. What remains is lists of nodes that join
together to form a section of highway. This is further split
into segments which are individual parts of a way connected by
Properties of highways (tags)
The ways that belong to highways are extracted from the data in
the previous step and for each way the useful information for
routing is stored. For the router the useful information is the
type of highway, the speed limit, the allowed types of transport
and other restrictions (one-way, minimum height, maximum weight
Connections between highways
The connections between highways are defined in the
OpenStreetMap data by ways that share nodes. Since the ways may
join in the middle and not just the ends it is the segments
defined above that are not part of the OpenStreetMap data that
are most important.
The information that is extracted from the OpenStreetMap data is stored
in an optimised way that allows the routing to be performed quickly.
Interpreting Data Tags
The tags are the information that is attached to the nodes and ways in
OpenStreetMap. The router needs to interpret these tags and use them
when deciding what type of traffic can use a highway (for example).
There are no well defined rules in OpenStreetMap about tagging, but
there is guidance on the OpenStreetMap Wiki "Map_Features" page. This
describes a set of recommended tags but these are not universally used
so it is up to each application how to interpret them.
The tagging rules that the router uses are very important in
controlling how the router works. With Routino the data tags can be
modified when the data is imported to allow customisation of the
information used for routing.
Problems With OpenStreetMap Data
The route that can be found is only as good as the data that is
available. This is not intended as a criticism of the OpenStreetMap
data; it is generally good.
There are some problems that are well known and which affect the
router. For example highways might be missing because nobody has mapped
them. A highway may be wrongly tagged with incorrect properties, or a
highway might be missing important tags for routing (e.g. speed
limits). There can also be problems with highways that should join but
don't because they do not share nodes.
A lot of these problems can be found using the interactive data
visualiser that uses the same Routino routing database.
Copyright 2008-2010 Andrew M. Bishop.