Routino : Software

Routino Introduction

Routino is an application for finding a route between two points using the dataset of topographical information collected by http://www.OpenStreetMap.org.

Starting from the raw OpenStreetMap data (in the form of the '.osm' XML files available on the internet) a custom database is generated that contains the information useful for routing. With this database and two points specified by latitude and longitude an optimum route (either shortest or quickest) is determined. The route is calculated for OpenStreetMap highways (roads, paths etc) using one of the common forms of transport defined in OpenStreetMap (foot, bicycle, horse, motorcar, motorcycle etc).

When processing the OpenStreetMap data the types of highways are recorded and these set default limits on the types of traffic allowed. More specific information about permissions for different types of transport are also recorded as are maximum speed limits. Further restrictions like one-way streets, weight, height, width and length limits are also included where specified. Additionally a set of properties of each highway are also recorded. The processing of the input file is controlled by a configuration file which determines the information that is used.

When calculating a route the type of transport to be used is taken into account to ensure that the known restrictions are followed. Each of the different highway types can further be allowed or disallowed depending on preferences. For each type of highway a default speed limit is defined (although the actual speed used will be the lowest of the default and any specified in the original data). To make use of the information about restrictions the weight, height, width and length of the transport can also be specified. Further preferences about road properties (e.g. paved or not) can also be selected. The simplest type of turn restrictions (those formed from an initial way, a node and a second way) are also obeyed.

The result of calculating the route can be presented in several different ways. An HTML file can be produced that contains a description of the route to take with instructions for each of the important junctions. The contents of the file are created based on a set of translations specified in a configuration file. The route is also available in a GPX (GPS eXchange) XML format. format file containing either every point and highway segment (a track file) or just a waypoint and translated instructions for the important junctions (a route file). Additionally there are two plain text files that contain all data points or just the important ones (intended for debugging and further processing).

One of the design aims of Routino was to make the software are flexible as possible in selecting routing preferences but also have a sensible set of default values. Another design aim was that finding the optimum route should be very fast and most of the speed increases come from the carefully chosen and optimised data format.

Disclaimer

The route that is calculated by this software is only as good as the input data.

Routino comes with ABSOLUTELY NO WARRANTY for the software itself or the route that is calculated by it.

Demonstration

A live demonstration of the router for the UK is available on the internet in both OpenLayers and Leaflet versions:
http://www.routino.org/uk-leaflet/
http://www.routino.org/uk-openlayers/

The source code download available below also includes a set of files that can be used to create your own interactive map.

The interactive map is made possible by use of the OpenLayers or Leaflet Javascript library from http://www.openlayers.org/ or http://leafletjs.com/.

Documentation

A full set of documentation is available that describes how to install and use the programs as well as what should go in the configuration files and how it works.

Status

Version 1.0 of Routino was released on 8th April 2009.
Version 1.1 of Routino was released on 13th June 2009.
Version 1.2 of Routino was released on 21st October 2009.
Version 1.3 of Routino was released on 21st January 2010.
Version 1.4 of Routino was released on 31st May 2010.
Version 1.4.1 of Routino was released on 10th July 2010.
Version 1.5 of Routino was released on 30th October 2010.
Version 1.5.1 of Routino was released on 13th November 2010.
Version 2.0 of Routino was released on 30th May 2011.
Version 2.0.1 of Routino was released on 7th June 2011.
Version 2.0.2 of Routino was released on 26th June 2011.
Version 2.0.3 of Routino was released on 4th August 2011.
Version 2.1 of Routino was released on 3rd October 2011.
Version 2.1.1 of Routino was released on 23rd October 2011.
Version 2.1.2 of Routino was released on 12th November 2011.
Version 2.2 of Routino was released on 3rd March 2012.
Version 2.3 of Routino was released on 21st July 2012.
Version 2.3.1 of Routino was released on 11th August 2012.
Version 2.3.2 of Routino was released on 6th October 2012.
Version 2.4 of Routino was released on 8th December 2012.
Version 2.4.1 of Routino was released on 17th December 2012.
Version 2.5 of Routino was released on 9th February 2013.
Version 2.5.1 of Routino was released on 20th April 2013.
Version 2.6 of Routino was released on 6th July 2013.
Version 2.7 of Routino was released on 22nd March 2014.
Version 2.7.1 of Routino was released on 17th May 2014.
Version 2.7.2 of Routino was released on 26th June 2014.
Version 2.7.3 of Routino was released on 8th November 2014.

The full version history is available in the NEWS.txt file.

Changes in Versions 2.7

Version 2.7 - mostly web page usability improvements.
Bug fixes:
Fix web-page CGI bug that did not allow more than 9 waypoints to be routed.
Fix typo in documentation strings in filedumper program.
Fix error in function prototype that stopped 64-bit node type being used.
Don't lose super-segments when merging them with normal segments.
Don't exceed the database lat/long limits when searching for visualiser data.
planetsplitter:
Don't overflow (and wrap-around) conversions of lengths, weights etc.
Add some new formats of length, weight and speed parsing.
Add .xz uncompression as a compile-time option (default is disabled).
router:
Remove ancient undocumented option to specify lat/lon without --lat/--lon.
Add a '--output-stdout' option to output the route in a selected format.
Add a '--reverse' option to calculate a route in the reverse order.
Add a '--loop' option to calculate a route that returns to the first waypoint.
Output valid HTML4 (use strict DTD and use numeric entity for apostrophe).
OSM tagging:
Allow bicycles both ways on certain oneway roads if tagging allows.
Handle "access=bus" like "access=psv".
Configuration Files:
Updated Dutch translations.
Updates to the XML parser tagging rules.
Added French translations for the routing output.
Documentation:
Update the algorithm documentation for finding the shortest path.
Update documentation HTML to strict 4.01 DTD.
Web pages:
Some changes to HTML, CSS formatting and Javascript to improve usability.
Added a French translation of the router web page.
Add the option to choose between OpenLayers and Leaflet for map rendering.
Check compatible with OpenLayers v2.13.1 and make this the default.
Create the router and visualiser pages from templates and translated phrases.

Note: This version has removed specific support for IE6 and IE7 browsers.

Note: Note: This version is compatible with databases from version 2.6.

Changes in Versions 2.7.1

Version 2.7.1 - mostly bug fixes (some from version 2.7, but mostly older ones).
Bug fixes:
Fix typo in documentation for command to get SVN version.
Fix router crash when waypoint is on roundabout.
Don't duplicate super-segments when merging them with normal segments.
Change routing instructions for bicycle if highways allow cycling both ways.
Make translation script work with older versions of Perl.
Fix router crash if fewer than two waypoints are specified.
Revert router speed decrease with special-case tagging rules.
Fix web page search function when it returns non-ASCII text.
Fix router failure due to invalid assumption about allowed U-turn.
Fix bug with updating XML files in web/data directory (Makefile error).
Fix router web page error due to absence of cyclebothways property entry.
Fix results error if a waypoint node was passed again on way to next waypoint.
Fix router crash when route contains consecutive coincident waypoints.
Fix bug with slightly incorrect distances when pruning short segments.
Test cases:
Create new test case for roundabout waypoint bug fixed in this version.
Create new test case for invalid U-turn assumption bug fixed in this version.
Create new test case for cycling both ways.
Create new test case for consecutive coincident waypoints.
router:
Remove cyclebothways as a property that can be used as a routing preference.
Web pages:
Disallow route calculation if fewer than two waypoints are selected.
Update visualiser for change of cyclebothways handling.
Translations:
Updated Russian translations.
Updated German translations.

Note: This version is not compatible with databases from previous versions.

Changes in Versions 2.7.2

Version 2.7.2 - mostly bug fixes introduced in version 2.7.1 on 64-bit systems.
Bug fixes:
Make the visualiser display all segments including those crossing the border.
Fix two errors that cause crashes only on 64-bit systems.
planetsplitter / router:
Increase the size of the caches for the slim programs by a factor of four.
Translations:
Updated Russian translations.
Updated German translations.

Note: This version is compatible with databases from version 2.7.1.

Changes in Versions 2.7.3

Version 2.7.3 - Slightly reduced memory usage and large reduction in time to generate routing database on low memory systems.
Bug fixes:
Limit the property preference ratio to 100 instead of 10000.
Don't allocate memory for sorting that won't be used.
planetsplitter:
Added an option to print out the allocated/mapped memory at each step.
Speed up database generation by compacting results after each pruning step.
Speed up database generation by sorting nodes geographically before pruning.
Reduce memory use while generating the database.
router:
Added the options to print out time and allocated/mapped memory at each step.
Translations:
Updated German translations.

Note: This version is compatible with databases from version 2.7.1 & 2.7.2.

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

It is important to note that for this program I have decided to use the Affero GPLv3 instead of just using the GPL. This license adds additional requirements to anybody who provides a networked service using this software.

Copyright

Routino is copyright Andrew M. Bishop 2008-2014.

Homepage

The Routino homepage has the latest news about the program.

Download

The download directory contains the latest version of the source code.

Subversion

The source code can also be downloaded from the Subversion repository with a command like the following:
svn co http://routino.org/svn/trunk routino

The source code can also be browsed in the Subversion viewer which also has a list of the latest changes.