--- /dev/null
+2010-07-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ Version 1.4.1 released
+
+2010-07-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/NEWS.txt: Update NEWS for release.
+
+ * doc/ALGORITHM.txt:
+ Update documentation for slight modification to algorithm, also add more
+ information about how preferences etc are handled.
+
+2010-07-09 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile:
+ Default compilation flags include optimisation and not debugging symbols.
+
+2010-07-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodes.c:
+ Fix error with finding closest segment to the specified point.
+
+ * src/optimiser.c:
+ Bug fix for not crashing when finding the middle part of the route.
+
+2010-07-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/results.c, src/optimiser.c:
+ Changed the amount of memory allocated for intermediate results => routes much
+ faster.
+
+ * src/output.c: Remove compilation warning.
+
+ * src/Makefile:
+ Copy files to web directory like done in other Makefiles.
+
+ * doc/Makefile:
+ Change location of HTML files in web directory and clean up web directory on distclean.
+
+ * src/xml/Makefile: Stop message being printed when make runs.
+
+ * xml/Makefile:
+ Fix error from last checkin and clean up web directory on distclean.
+
+2010-07-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c:
+ Don't crash if the middle part of the route can't be found but exit cleanly.
+
+2010-07-05 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/superx.c: Change the algorithm used to determine supernodes.
+
+2010-07-03 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * xml/routino-translations.xml:
+ Added German translation [patch from Christoph Eckert].
+
+ * src/translations.c:
+ Don't crash if more than one language is in translations.xml but --language
+ option is not used.
+
+2010-06-28 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c: Don't crash if start and finish are the same point.
+
+2010-06-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/DATA.txt: New file.
+
+ * doc/ALGORITHM.txt, doc/CONFIGURATION.txt, doc/INSTALL.txt, doc/OUTPUT.txt, doc/README.txt,
+ doc/TAGGING.txt, doc/USAGE.txt:
+ Updated documentation to match new web site.
+
+ * doc/Makefile: New file.
+
+ * xml/Makefile: Add some new variables.
+
+2010-06-26 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * xml/routino-profiles.xml, xml/routino-tagging-nomodify.xml, xml/routino-tagging.xml,
+ xml/routino-translations.xml, src/translations.c:
+ Changed URLs to http://www.routino.org/
+
+ * doc/README.txt: *** empty log message ***
+
+ * doc/OUTPUT.txt: Changed URLs to http://www.routino.org/
+
+2010-05-31 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ Version 1.4 released
+
+2010-05-31 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/INSTALL.txt, doc/NEWS.txt, doc/README.txt:
+ Update for version 1.4.
+
+ * src/xml/Makefile: Make sure that distclean really cleans up.
+
+ * Makefile: Make sure that xml sub-directory is made.
+
+ * src/router.c:
+ Fix the code that should stop routing if no segment is found.
+
+2010-05-30 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/USAGE.txt:
+ Add the planetsplitter tagging rules option (and remove the unnecessary options
+ that it replaces), add the filedumper OSM dump option and add the tagmodifier
+ program.
+
+ * doc/TAGGING.txt: Describe the new tagging rules.
+
+ * doc/OUTPUT.txt: Note that the HTML and GPX outputs are translated.
+
+ * doc/CONFIGURATION.txt: Add the tagging rules configuration file.
+
+ * doc/ALGORITHM.txt: An update to the current size of the UK database.
+
+ * xml/routino-tagging-nomodify.xml: New file.
+
+ * src/tagmodifier.c:
+ A tagging XML file must be read (just like planetsplitter).
+
+ * src/filedumper.c:
+ Add the option to dump a region rather than all and to not output super
+ segments.
+
+ * src/optimiser.c: Fix printing the number of super-segments tried.
+
+2010-05-29 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * xml/routino-translations.xml, xml/routino-translations.xsd, src/ways.h, src/filedumper.c,
+ src/osmparser.c, src/output.c, src/translations.c, src/translations.h:
+ Translate the names given to unnamed roads (the highway type).
+
+ * src/profiles.c, src/profiles.h, src/router.c:
+ Stricter check on specified profile before routing.
+
+ * src/router.c: Ensure that if no segment is found the routing stops.
+
+ * src/nodes.c:
+ When finding a closest segment one of the nodes must be within the search
+ distance.
+
+2010-05-28 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c: Make sure that some profiles are loaded.
+
+2010-05-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/profiles.c:
+ Fix bug with profile preferences (used incorrectly in route optimisation).
+
+ * src/Makefile, src/filedumper.c, src/types.c, src/types.h:
+ Add an option to filedumper to dump an OSM format file.
+
+2010-05-25 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xmlparse.l: Fix bug with encoding XML strings.
+
+2010-05-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * xml/Makefile:
+ Make sure that modified files are copied to web directory.
+
+ * src/tagmodifier.c:
+ Fix bug when filename is specified on command line.
+
+ * src/tagging.c, src/tagging.h, src/tagmodifier.c, src/xmlparse.l, src/osmparser.c:
+ Fix some memory leaks.
+
+ * src/tagmodifier.c, xml/osm.xsd, xml/routino-osm.xsd, src/osmparser.c:
+ Add the 'bound' element to the XML parser.
+
+2010-05-22 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functionsx.h, src/osmparser.c, src/planetsplitter.c, src/ways.h, src/waysx.c,
+ src/waysx.h:
+ Remove the --transport=<transport>, --not-highway=<highway> and
+ --not-property=<property> options from planetsplitter because they can be done
+ by the tagging.xml file now.
+
+2010-05-18 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile: Add tagmodifier program.
+
+ * src/xmlparse.l: Handle floating point numbers in scientific notation.
+
+ * src/planetsplitter.c:
+ Read in the tag transformation rules before calling the OSM parser.
+
+ * src/functionsx.h, src/osmparser.c:
+ Almost completely re-written OSM parser using tagging transformations.
+
+ * src/tagmodifier.c, src/tagging.h, src/tagging.c: New file.
+
+ * xml/Makefile: Copy the tagging rules to the web directory.
+
+ * xml/routino-tagging.xml, xml/routino-tagging.xsd, xml/routino-osm.xsd:
+ New file.
+
+ * xml/osm.xsd: Small fix for OSM schema.
+
+2010-05-14 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/types.c: Remove highway type aliases from HighwayType() function.
+
+ * src/xmlparse.h, src/xmlparse.l: Allow empty strings to be returned.
+
+2010-05-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xmlparse.h, src/xmlparse.l:
+ The line number is now a long integer.
+
+ * src/xml/Makefile: Running 'make test' now compiles everything first.
+
+2010-04-28 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xml/Makefile: Delete zero length file if xsd-to-xmlparser fails.
+
+ * src/nodes.c, src/nodesx.c, src/segments.c, src/segmentsx.c, src/ways.c, src/waysx.c:
+ Change file format to allow 64-bit off_t type with 32 bit void* type.
+
+ * src/Makefile, src/filedumper.c, src/xml/Makefile:
+ Compile with _FILE_OFFSET_BITS=64 to get 64-bit fopen() and stat().
+
+2010-04-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c: Fix mistake of writing GPX information to wrong file.
+
+ * doc/OUTPUT.txt, doc/CONFIGURATION.txt: New file.
+
+ * doc/TAGGING.txt, doc/USAGE.txt, doc/ALGORITHM.txt, doc/INSTALL.txt, doc/NEWS.txt,
+ doc/README.txt:
+ Interim checkin of updated documentation.
+
+2010-04-24 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c:
+ Merged the three functions to output the head/body/tail of the results back into
+ a single function. Added the '--output-none' option.
+
+ * src/functions.h, src/output.c:
+ Merged the three functions to output the head/body/tail of the results back into
+ a single function.
+
+ * xml/routino-translations.xml, xml/routino-translations.xsd, src/output.c,
+ src/translations.c, src/translations.h:
+ Added translations for the HTML output.
+
+ * src/xmlparse.h, src/xmlparse.l: Changed functions from const.
+
+ * src/output.c:
+ Add the copyright information into the translations.xml file instead of the
+ separate copyright.txt file. Add the translated copyright strings into the
+ outputs.
+
+ * src/functions.h, src/router.c, src/translations.c, src/translations.h:
+ Add the copyright information into the translations.xml file instead of the
+ separate copyright.txt file.
+
+ * src/xmlparse.h, src/xmlparse.l:
+ Add an option to not convert the XML strings into decoded representations (saves
+ converting them back later for the translated strings).
+
+2010-04-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xml/xsd-to-xmlparser.c, src/translations.c, src/xmlparse.h, src/xmlparse.l,
+ src/profiles.c:
+ Pass the tag name to the tag function.
+
+2010-04-22 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * Makefile: Fix bug in makefile.
+
+ * xml/Makefile: Move the translations into the web directory.
+
+ * xml/routino-translations.xml, xml/routino-translations.xsd: New file.
+
+ * src/output.c: Changed HTML output to be useful in web pages.
+
+ * src/xmlparse.l:
+ Restart properly so that a different file can be read.
+
+2010-04-13 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xml/xsd-to-xmlparser.c, src/profiles.c, src/translations.c:
+ Name the tag variables and functions after the XSD data type and not the tag
+ name that uses it.
+
+2010-04-12 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c, src/translations.c, src/xmlparse.h, src/xmlparse.l,
+ src/xml/xsd-to-xmlparser.c, src/xml/Makefile:
+ Change the last parameter to the ParseXML function to be general options.
+
+ * src/Makefile, src/types.h, src/ways.c, src/ways.h:
+ Move the type checking/printing functions from way.c to type.c.
+
+ * src/types.c: New file.
+
+2010-04-11 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xml/xsd-to-xmlparser.c, src/profiles.c, src/translations.c, src/xmlparse.h,
+ src/xmlparse.l:
+ Added helper functions for parsing strings into numbers.
+ Added macros to perform common error checking.
+ Change XML parser callback functions to return an error status.
+
+2010-04-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c: Fix usage information.
+
+ * src/translations.h, src/translations.c: New file.
+
+ * src/output.c: Added translations for GPX and turn/heading.
+
+ * src/Makefile, src/router.c:
+ Added file of translations and language selection.
+
+2010-04-09 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/planetsplitter.c, src/sorting.c:
+ Add an option '--sort-ram-size' to specify the RAM to use for sorting - defaults
+ to 256MB if not using slim mode.
+
+2010-04-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xml/Makefile: Fix test program generation and running.
+
+ * src/xmlparse.h, src/xmlparse.l:
+ Make the strings const and add the number of attributes to the xmltag structure.
+ Add functions to convert character entities and character references.
+
+ * src/profiles.c, src/xml/xsd-to-xmlparser.c:
+ Make the strings const and add the number of attributes to the xmltag structure.
+
+2010-04-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * xml/Makefile: New file.
+
+2010-04-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile:
+ Remove special lex/flex flags. Remove profiles.o from planetsplitter.
+
+ * src/xml/xsd-to-xmlparser.c:
+ Don't print anything for attributes that are not set.
+
+ * src/xmlparse.l:
+ Change error message for bad character in a quoted string.
+ Make sure attribute values are cleared before calling tag function (for
+ end-tags).
+
+2010-04-04 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/xml/Makefile: Add some XML parsing test cases.
+
+ * src/xml/xsd-to-xmlparser.c: Rename the XML handling function.
+
+ * src/xmlparse.h, src/xmlparse.l, src/profiles.c: Added error checking.
+
+2010-04-03 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functionsx.h, src/osmparser.c, src/planetsplitter.c:
+ Rename the old ParseXML() function as ParseOSM().
+
+2010-04-01 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c: Wrap GPX descriptions in CDATA.
+
+2010-03-31 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * xml/routino-profiles.xml: New file.
+
+ * src/xml/xsd-to-xmlparser.c, src/profiles.c, src/xmlparse.h, src/xmlparse.l:
+ Call the XML tag functions for the end tags as well as the start tags.
+
+2010-03-30 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c, src/profiles.h:
+ Change the name of the --profile-json and --profile-perl options.
+
+ * src/filedumper.c, src/planetsplitter.c, src/router.c:
+ Improve the program help messages.
+
+2010-03-29 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/files.c, src/functions.h, src/profiles.c, src/profiles.h, src/router.c:
+ Added command line option to specify a file containing profiles.
+ Added command line option to select profile by name from loaded set.
+ Use XML parser to read in the profiles.
+
+ * src/Makefile: Better handling of the xml sub-directory.
+
+ * src/xml/xsd-to-xmlparser.c:
+ Add the option to ignore unknown attributes.
+ Print out the skeleton file using static functions and variables.
+
+ * src/xml/Makefile: Keep the intermediate files.
+
+ * src/xmlparse.h, src/xmlparse.l:
+ Add the option to ignore unknown attributes.
+
+2010-03-28 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.h, src/router.c, src/profiles.c:
+ Add an option to print out the profiles as XML format.
+
+ * src/xmlparse.h, xml/xsd.xsd, xml/osm.xsd, src/xml/xsd-to-xmlparser.c:
+ New file.
+
+ * src/Makefile: Added the XML subdirectory and xmlparser.c.
+
+ * src/xmlparse.l, src/xml/Makefile: New file.
+
+2010-03-20 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c: Add descriptions to each point in the GPX route file.
+
+ * src/files.c, src/functions.h, src/nodesx.c, src/output.c, src/segmentsx.c, src/waysx.c:
+ Move the stat() calls to find a file size into a helper function in files.c.
+
+ * src/files.c, src/output.c, src/planetsplitter.c:
+ Improve the error messages by adding strerror() to them.
+
+ * src/filedumper.c, src/router.c:
+ Don't check the return value of the functions to load the nodes, segments and
+ ways because those functions will exit in case of an error.
+
+ * src/nodes.c, src/segments.c, src/ways.c:
+ Don't check the return value of MapFile() because it will exit in case of an
+ error.
+
+ * src/planetsplitter.c:
+ Allow filenames on the planetsplitter command line.
+
+2010-03-19 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/waysx.h, src/filedumper.c, src/files.c, src/functions.h, src/nodesx.c, src/nodesx.h,
+ src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/waysx.c:
+ Allow planetsplitter to be run with a --parse-only or --process-only option and
+ append to existing file or read from existing file.
+
+2010-03-18 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c: Fix usage message error and shuffle order.
+
+ * src/output.c, src/router.c:
+ Allow selection of which outputs are to be created.
+
+2010-03-17 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c: Re-order the code for HTML.
+
+2010-03-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c: Create a simple HTML output.
+
+2010-03-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c, src/nodes.c:
+ Speed up start/via/stop point search algorithm.
+
+2010-03-05 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c:
+ Change the format of the output for the --help-profile-{pl|js} options.
+
+2010-01-21 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ Version 1.3 released
+
+2010-01-21 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/NEWS.txt: Update to latest news.
+
+2010-01-18 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/USAGE.txt, doc/TAGGING.txt, doc/INSTALL.txt:
+ Updated documentation.
+
+2010-01-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c, src/functions.h:
+ Change the test output formats to add turn, node type and bearing information.
+
+2010-01-13 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c:
+ Change the test output formats to add turn, node type and bearing information.
+
+2009-12-16 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c:
+ Added an option to use only nodes and not interpolate a point into a segment.
+
+2009-12-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c:
+ Added wheelchair as type of transport.
+
+2009-12-13 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c:
+ Add bridge and tunnel to highway properties.
+
+2009-12-12 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile:
+ Ignore the error if executables cannot be copied after compiling.
+
+ * src/functions.h, src/nodesx.c, src/segmentsx.c, src/sorting.c, src/waysx.c:
+ Add some FILESORT_* #defines and use them.
+
+2009-12-11 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/sorting.c,
+ src/waysx.c, src/waysx.h:
+ Added a new function to sort variable length data - simplifies the compacting of
+ ways, reduces memory usage potentially required for it and simplifies the code.
+
+2009-12-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/waysx.c:
+ Write out the list of ways without memory mapping anything.
+
+2009-11-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c:
+ Add in "multilane" as a new highway property.
+
+2009-11-25 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/filedumper.c, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/profiles.h,
+ src/router.c, src/ways.h, src/waysx.c, src/waysx.h:
+ Store the selected options when parsing (planetsplitter) and display them in the
+ statistics (filedumper) and check them when routing (router).
+
+2009-11-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/output.c, src/profiles.c, src/types.h, src/ways.c:
+ Add in "steps" as a new highway type.
+
+2009-11-19 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/router.c:
+ Made the verbose output consistent between different places.
+
+2009-11-18 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c: Fix bug with previous segment-splitting routing.
+
+2009-11-14 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/output.c, src/router.c, src/segments.h, src/functions.h, src/nodes.c,
+ src/nodes.h:
+ If a selected waypoint is not very close to an existing node then insert a fake
+ node in the segment that comes closest and use that instead.
+
+2009-11-13 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/osmparser.c, src/queue.c, src/results.c, src/results.h, src/types.h:
+ Added in some more constants with the value ~0.
+
+2009-11-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/filedumper.c:
+ Check the values for the --node=, --segment= and --way= options.
+
+2009-11-03 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c, src/planetsplitter.c, src/profiles.c, src/profiles.h, src/router.c,
+ src/types.h, src/ways.c:
+ Rename Way_Unknown to Way_Count to make more sense and match the properties.
+
+2009-11-02 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c: Allow the tag "paved" as well as "surface=paved".
+
+ * src/filedumper.c, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/profiles.c,
+ src/profiles.h, src/router.c, src/types.h, src/ways.c, src/ways.h:
+ Added the ability to set routing preferences using highway properties.
+ Initially the only choice is either paved or unpaved but the code has been
+ updated to allow any number of properties to be added.
+
+2009-10-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c:
+ Handle the "designation=..." tag for bridleway, byway and footpath. (Also
+ change to using a macro for testing if access is allowed and now allow
+ "destination").
+
+ * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c, src/ways.h:
+ Added Moped to the list of transports (and incidentally increased the transport
+ data type to 16 bits and re-ordered the Way data-type in response).
+
+2009-10-26 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c:
+ Ensure that horses and bicycles have a default speed on trunk even though they
+ have a default preference not to use it.
+
+ * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c:
+ Re-ordered the types so that Horse comes before Bicycle.
+
+ * src/osmparser.c, src/output.c, src/profiles.c, src/types.h, src/ways.c:
+ Remove the Bridleway and Footway highway types and use the Path type instead
+ (also re-ordered the types so that Cycleway comes before Path).
+
+ * src/profiles.c: Remove unneeded spaces at the end of the output.
+
+2009-10-25 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c:
+ Fix bug in code that determines waypoints for abbreviated output.
+
+2009-10-24 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/optimiser.c, src/router.c:
+ Fix missing segments in output if start and finish points are found by the start
+ search.
+
+2009-10-22 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/files.c, src/nodesx.c, src/segmentsx.c, src/sorting.c, src/superx.c, src/waysx.c:
+ Added some missing comments and corrected some existing ones.
+
+2009-10-21 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ Version 1.2 released
+
+2009-10-21 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/README.txt, doc/USAGE.txt, doc/NEWS.txt: Updated for version 1.2.
+
+2009-10-20 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile: Add sorting.o to the Makefile.
+
+2009-10-12 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/waysx.c: When sorting we cannot have NULL pointers now.
+
+ * src/nodesx.c, src/segmentsx.c, src/waysx.c:
+ Re-order the functions in the file into a more logical order.
+ No functional changes.
+
+ * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/sorting.c, src/waysx.c:
+ Rename the tmpdirname variable.
+
+2009-10-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/osmparser.c, src/segmentsx.c, src/sorting.c, src/waysx.c:
+ Corrections after running with valgrind.
+
+ * src/planetsplitter.c: Fix early termination test.
+
+ * src/nodesx.c, src/nodesx.h, src/segmentsx.c:
+ Remove the nodesx->gdata index.
+
+2009-10-09 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/segmentsx.c, src/typesx.h, src/waysx.c, src/waysx.h:
+ Free the nodesx->super array and the segmentsx->firstnode array when finished
+ with them. Remove wayx->cid and overwrite wayx->id instead. Overwrite
+ nodex[i]->id=i for later geographically sorted use.
+
+2009-10-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c:
+ Replace node, segment and way indexes with a single index for a set of segments
+ containing the location of the first segment for each node.
+
+ * src/nodesx.h: Fix comment.
+
+2009-10-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/segmentsx.c, src/superx.c:
+ AppendSegment adds a single segment and not a pair.
+
+ * src/waysx.c: Use heapsort() instead of qsort().
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h,
+ src/superx.c, src/waysx.c:
+ Go back to the version 1.1 method of having each segment listed twice. This
+ simplifies the lookup of first/next segments at no in-RAM index cost and now
+ that slim mode has sorting of file contents the balance has tipped back.
+
+2009-10-04 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/sorting.c:
+ Change the sort function to allow the indexing callback to veto the write.
+
+ * src/nodesx.c: Remove the duplicates when sorting.
+
+ * src/waysx.c:
+ Sort the ways using the same method as the nodes. Also remove the duplicates.
+
+ * src/nodesx.c:
+ Use the new sort functions to allow sorting the data in the file without needing
+ to read (or mmap) the whole file into RAM at the same time.
+
+ * src/functions.h: Add some functions to perform sorting.
+
+ * src/sorting.c: New file.
+
+ * src/queue.c: Fix bug with binary heap sort.
+
+2009-09-25 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/queue.c: Add comments describing the algorithm used.
+
+2009-09-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/waysx.c:
+ Simplify the de-duplication when sorting and update some comments.
+
+2009-09-22 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/nodesx.h:
+ Remove a leftover from the last change on these files.
+
+ * src/segmentsx.c: Improve the super-segment de-duplication.
+
+2009-09-21 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c:
+ Remove the non-highway nodes without re-sorting the whole list again.
+
+2009-09-17 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/planetsplitter.c, src/segmentsx.c, src/superx.c, src/waysx.c,
+ src/waysx.h:
+ Added the slim mode to Ways as well.
+
+ * src/ways.h: Add padding to Ways structure to allow it to be zeroed.
+
+ * src/nodesx.c: Add some comments when closing and re-opening files.
+
+ * src/files.c, src/functions.h:
+ The WriteFile function now has a const parameter.
+
+2009-09-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c:
+ Some bug fixes and some missing unmap function calls.
+
+2009-09-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segmentsx.h, src/superx.c, src/nodesx.c, src/nodesx.h, src/segmentsx.c:
+ Fixed slim mode for segments and nodes (slim now means mapping only one file
+ into RAM at a time and none when creating the final output).
+
+2009-09-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c,
+ src/superx.h, src/nodesx.c:
+ Slim version of segments code (still very slow and only works on simple cases).
+
+ * src/files.c, src/functions.h:
+ Remove the delete option from UnmapFile() and make it return NULL.
+
+ * src/filedumper.c: Allow dumping all nodes, segments or ways.
+
+2009-09-05 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c: Don't re-sort unnecessarily.
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/superx.c:
+ Improve slim mode for nodes so that no data is not loaded into RAM at all.
+
+ * src/files.c, src/functions.h: Add some more file functions.
+
+2009-09-03 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/files.c, src/functions.h:
+ Remove extra argument from MapFile function.
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/superx.c:
+ Added slim mode (--slim) to planetsplitter for nodes only.
+
+ * src/files.c, src/functions.h:
+ Changes to mapping and unmapping files for slim mode.
+
+2009-08-25 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/planetsplitter.c: Revert the order that the functions are called.
+
+ * src/nodesx.c: Fix for assert statement.
+
+ * src/files.c: Bug fix for mmap().
+
+2009-08-20 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c: Fix bug with memory allocation.
+
+2009-08-19 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h,
+ src/superx.c, src/waysx.c, src/waysx.h:
+ Remove "sorted" parameter in data structure and change assert statements.
+
+2009-08-17 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c:
+ Increase to 99 the number of waypoints that can be specified.
+
+2009-08-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/queue.c: Fix comment.
+
+ * src/Makefile:
+ Tidy the compilation options to make it easier to turn them on and off.
+
+ * src/router.c:
+ Remove the --all, --super and --no-output command line options.
+ Handle the renamed routing functions.
+
+ * src/functions.h, src/optimiser.c:
+ Rename the routing functions and make FindRoute only find routes with no
+ super-nodes in them.
+
+ * src/queue.c:
+ When popping from queue make sure that place in queue is cleared.
+
+ * src/optimiser.c, src/queue.c, src/results.c, src/results.h, src/superx.c:
+ Optimise the priority queue used for routing.
+
+ * src/filedumper.c: Fix dumping nodes when they are super-nodes.
+
+2009-07-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile, src/optimiser.c, src/results.c, src/results.h, src/superx.c:
+ Split off queue functions into a separate file.
+
+ * src/queue.c: New file.
+
+2009-07-19 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/segments.h, src/segmentsx.c, src/ways.h, src/waysx.c, src/filedumper.c,
+ src/nodes.h:
+ Include the number of super-nodes, super-segments etc in the database as useful
+ information to put in the statistics output.
+
+ * src/superx.c: Fix incorrect progress indicator message.
+
+ * src/waysx.c: Fix problem with memory reallocation.
+
+ * src/nodesx.c, src/osmparser.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h,
+ src/superx.c:
+ Store only one copy of each segment but index once for each direction.
+
+2009-07-12 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functionsx.h, src/nodesx.c, src/nodesx.h, src/osmparser.c, src/output.c,
+ src/planetsplitter.c, src/profiles.c, src/results.c, src/segments.c, src/segmentsx.c,
+ src/segmentsx.h, src/superx.c, src/superx.h, src/ways.h, src/waysx.c, src/waysx.h:
+ Tidy up and fix comments and include files.
+
+ * src/osmparser.c, src/planetsplitter.c, src/router.c, src/segmentsx.c, src/superx.c,
+ src/waysx.c, src/filedumper.c, src/nodesx.c, src/optimiser.c:
+ Check all print statements and made them more consistent and/or accurate.
+
+2009-07-11 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/waysx.c,
+ src/waysx.h:
+ Free memory at the end of planetsplitter (to aid finding potential leaks
+ earlier).
+
+2009-07-09 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segmentsx.c: Free memory correctly (really).
+
+ * src/planetsplitter.c, src/waysx.c, src/waysx.h:
+ Separate the sorting of Ways from compacting of Ways.
+
+ * src/nodes.h, src/nodesx.c, src/nodesx.h, src/segmentsx.c, src/visualiser.c,
+ src/filedumper.c, src/nodes.c:
+ Rename structure members after recent changes.
+
+ * src/segmentsx.c: Free memory correctly.
+
+ * src/types.h, src/segmentsx.c: Fix duplicate checking.
+
+ * src/planetsplitter.c: Ensure that variable is reset before using it.
+
+ * src/types.h, src/visualiser.c, src/visualiser.h, src/filedumper.c, src/nodes.c,
+ src/nodes.h, src/nodesx.c, src/nodesx.h, src/optimiser.c, src/osmparser.c, src/output.c,
+ src/router.c, src/segments.c, src/segments.h, src/segmentsx.c:
+ Change from float to double for latitude and longitude.
+ Store latitude and longitude as an integer type rather than float (higher precision).
+
+2009-07-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/superx.c: Ensure that variable is reset before using it.
+
+2009-07-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/visualiser.c:
+ Print all super-segments within and crossing the border.
+ Don't display speed limits for tracks and paths unless set.
+
+2009-07-04 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segmentsx.h, src/superx.c, src/waysx.c, src/waysx.h:
+ Change data structure to avoid calling realloc() each time to allocate more
+ memory.
+
+2009-07-02 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/types.h, src/waysx.c, src/waysx.h:
+ Handle duplicate ways.
+
+ * src/nodes.c, src/nodesx.c, src/planetsplitter.c, src/profiles.c, src/results.c,
+ src/segments.c, src/segmentsx.c, src/superx.c, src/superx.h, src/types.h, src/ways.c,
+ src/waysx.c:
+ Fix some gcc pedantic warnings.
+
+ * src/files.c, src/nodesx.c, src/osmparser.c, src/results.c, src/router.c, src/segments.c,
+ src/segmentsx.c, src/superx.c, src/ways.c, src/waysx.c:
+ Removed unused header files, change assert statements, tidy some code.
+
+2009-07-01 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c:
+ Remove the Node structure from the NodeX structure to save memory.
+
+ * src/filedumper.c:
+ Print latitude and longitude in degrees.
+
+2009-06-30 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segmentsx.h:
+ Re-order the data in the structure.
+
+ * src/nodesx.c, src/nodesx.h, src/osmparser.c, src/planetsplitter.c, src/segmentsx.c,
+ src/segmentsx.h, src/superx.c, src/waysx.h:
+ Remove the Segment structure from the SegmentX structure to save memory.
+
+2009-06-29 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/filedumper.c, src/nodes.h, src/nodesx.c, src/segments.c, src/segments.h,
+ src/segmentsx.c, src/superx.c, src/types.h:
+ Move the super-segment and normal-segment flags from the nodes to the distance.
+ Remove the NODE() macro and rename SUPER_FLAG to NODE_SUPER.
+
+ * src/waysx.c: Replace memmove with structure copy.
+
+ * src/nodesx.c, src/segmentsx.c, src/segmentsx.h, src/superx.c:
+ Rename SegmentsX sdata to ndata.
+
+2009-06-25 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/waysx.c, src/waysx.h: Rename part of the structure.
+
+ * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h,
+ src/superx.c, src/waysx.h:
+ Undo part of the previous change - only update the Segment way index at the end.
+
+ * src/waysx.h, src/nodesx.c, src/osmparser.c, src/planetsplitter.c, src/segmentsx.c,
+ src/segmentsx.h, src/superx.c, src/superx.h, src/typesx.h, src/waysx.c:
+ Reduce the number of ways in the output by compacting them (sharing the same
+ information between identical ways).
+
+2009-06-24 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/filedumper.c, src/nodes.h:
+ Allow dumping out of nodes, segments and ways.
+
+2009-06-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segmentsx.c, src/superx.c, src/visualiser.c, src/ways.c, src/ways.h:
+ Rename WaysSame() with WaysCompare() and reverse the sense of the output.
+
+ * src/functionsx.h, src/typesx.h: New file.
+
+ * src/functions.h, src/nodesx.h, src/osmparser.c, src/planetsplitter.c, src/segmentsx.h,
+ src/superx.h, src/types.h, src/waysx.h:
+ Put some of types.h into typesx.h (for extended data types).
+ Put some of functions.h into functionsx.h (for OSM parser).
+ Change included files to match.
+
+ * src/filedumper.c, src/osmparser.c, src/output.c, src/router.c, src/types.h, src/visualiser.c:
+ Add a macro for converting degrees to radians and radians to degrees.
+
+ * src/optimiser.c:
+ Fix weight, height, width, length restriction routing.
+
+ * doc/TAGGING.txt, src/osmparser.c:
+ Recognise tags "vehicle" and "motor_vehicle".
+
+2009-06-13 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ Version 1.1 released
+
+2009-06-13 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h:
+ Handle nodes that are missing from the .osm file (ignore the segment).
+
+ * src/nodesx.c:
+ Revert the last change (Print an error message and exit if a node cannot be found).
+
+ * doc/NEWS.txt: New file.
+
+ * src/Makefile:
+ Delete the executables from the web directory for 'distclean'.
+
+2009-06-12 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/USAGE.txt, doc/INSTALL.txt, doc/README.txt:
+ Update the documentation.
+
+ * src/Makefile: Copy the executables into the web directory.
+
+2009-06-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/filedumper.c: Change help text.
+
+ * src/visualiser.c:
+ Change format of super-node/segment visualiser output.
+
+2009-06-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/TAGGING.txt: Updated with imperial to metric conversions.
+
+ * src/Makefile: Added visualiser.c.
+
+ * src/filedumper.c: Now used for data visualisation and statistics.
+
+ * src/visualiser.h, src/visualiser.c: New file.
+
+2009-06-05 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c:
+ Improve parsing of imperial units (mph, feet & inches).
+
+2009-06-03 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c:
+ Print an error message and exit if a node cannot be found.
+
+2009-05-31 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/ways.c, src/ways.h, src/waysx.c, src/waysx.h:
+ Move function from waysx.c to ways.c.
+
+2009-05-29 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/USAGE.txt:
+ Update usage information with new options and copyright.txt usage.
+
+ * src/nodes.c, src/nodes.h, src/router.c:
+ Make sure that the chosen "nearest point" is a highway that the profile allows.
+
+2009-05-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c:
+ Change the default profile; horses are slower, bicycles may be allowed on
+ footways (and similar).
+
+2009-05-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/files.c, src/output.c:
+ Error checking on opening files (to read/write data and to write output).
+
+2009-05-14 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c, src/results.c, src/router.c, src/segments.c, src/segmentsx.c, src/superx.c,
+ src/types.h, src/nodes.c, src/nodesx.c, src/optimiser.c:
+ Replace ~0 or 0 with NO_NODE value for "no node" condition.
+
+2009-05-13 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c:
+ Remove one more NODE macro and fix an output formatting error.
+
+ * src/nodes.c, src/nodes.h, src/optimiser.c, src/output.c, src/router.c:
+ Remove some node macros, change some node function arguments.
+
+ * src/optimiser.c, src/profiles.c, src/profiles.h:
+ Move some common code into the profile.
+
+ * src/superx.c: Remove distance and duration from Result structure.
+
+ * src/output.c: Better junction detection.
+
+ * src/optimiser.c, src/results.c, src/results.h:
+ Remove distance and duration from Result structure.
+
+2009-05-09 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/output.c:
+ Add better junction detection for deciding on route waypoints.
+
+2009-05-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/profiles.c, src/profiles.h, src/types.h:
+ Route using preferences for each highway.
+
+ * src/router.c: Print out longitude then latitude.
+
+2009-04-30 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/results.h, src/router.c, src/superx.c, src/types.h, src/optimiser.c, src/osmparser.c,
+ src/planetsplitter.c, src/profiles.c, src/profiles.h, src/results.c:
+ First attempt at preferences for highways - uses integer arithmetic and doesn't
+ work well.
+
+2009-04-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/optimiser.c, src/output.c, src/results.c, src/results.h, src/router.c:
+ Allow generating a route with intermediate waypoints.
+
+2009-04-24 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/output.c, src/router.c:
+ Split the output functions into separate head/body/tail.
+ Read in an optional copyright.txt file and include contents in output.
+
+2009-04-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c: Improve Javascript and perl print out.
+
+ * src/filedumper.c, src/files.c, src/functions.h, src/planetsplitter.c, src/router.c:
+ Move the filename generation to a new function.
+
+2009-04-22 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile, src/functions.h, src/optimiser.c:
+ Split the function to print the output into a new file.
+
+ * src/output.c: New file.
+
+2009-04-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c:
+ Fix for parsing nodes from XML (no effect on results).
+
+2009-04-12 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * doc/USAGE.txt, src/optimiser.c:
+ Create a GPX route as well as a track.
+
+ * src/ways.c: Changed the license to Affero GPLv3.
+
+2009-04-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c:
+ Add a waypoint to the GPX file for the start and finish points.
+
+ * doc/USAGE.txt:
+ Include more information about the output file formats.
+
+2009-04-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ Version 1.0 released
+
+2009-04-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * Makefile: New file.
+
+ * src/Makefile: Fix dependency file generation.
+
+ * doc/USAGE.txt, doc/TAGGING.txt, doc/README.txt, doc/INSTALL.txt, doc/ALGORITHM.txt:
+ New file.
+
+ * src/Makefile, src/filedumper.c, src/files.c, src/functions.h, src/nodes.c, src/nodes.h,
+ src/nodesx.c, src/nodesx.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c,
+ src/profiles.c, src/profiles.h, src/results.c, src/results.h, src/router.c, src/segments.c,
+ src/segments.h, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/superx.h, src/types.h,
+ src/ways.h, src/waysx.c, src/waysx.h:
+ Changed the license to Affero GPLv3.
+
+2009-04-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/planetsplitter.c: Remove the --help-profile command line option.
+
+2009-03-28 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c:
+ Fix file headers (again) and fix segment distance/duration for abbreviated text
+ output.
+
+2009-03-24 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c:
+ Added highway=path; defaults to foot=yes but also is defaulted for bicycle and
+ horse transport.
+
+2009-03-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c: Fixed the header in the output text files.
+
+ * src/osmparser.c:
+ Add parsing for *=designated allowing passage along a highway.
+
+ * src/profiles.h, src/router.c, src/profiles.c:
+ Add a function to output default profiles as perl data structures.
+
+2009-03-21 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c:
+ Handle duplicated nodes (e.g. from concatenated input files).
+
+ * src/optimiser.c: Add a header to the output text files.
+
+2009-03-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c:
+ Renamed the *.txt output to *-all.txt and added a new shorted *.txt output.
+
+ * src/router.c: Renamed the --no-print option to --no-output.
+
+2009-03-04 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodes.c: Fix bug with finding nearest node.
+
+2009-03-03 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/superx.c: Fix the merging of super-segments.
+
+2009-03-01 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c, src/profiles.h:
+ Added more limits (weight, height, width, length).
+
+ * src/segments.c: Use the lower speed from the profile and the way.
+
+ * src/osmparser.c: Added more limits (weight, height, width, length).
+ Added highway=living_street and highway=services.
+
+ * src/ways.c, src/ways.h, src/optimiser.c, src/router.c, src/segmentsx.c, src/superx.c,
+ src/types.h:
+ Added more limits (weight, height, width, length).
+
+ * src/waysx.c, src/waysx.h:
+ Added a function to test if two ways are the same.
+
+2009-02-28 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodesx.c:
+ Round the node location to avoid if falling into the wrong bin.
+
+ * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/waysx.c:
+ Move print statements from planetsplitter into individual functions.
+
+ * src/Makefile: Compile with optimisation and no profiling.
+
+ * src/profiles.c, src/router.c:
+ Add new command line options to make it more CGI friendly.
+
+2009-02-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c, src/profiles.h, src/router.c:
+ Print out Javascript code containing the profiles.
+
+2009-02-24 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segmentsx.h, src/superx.c, src/nodesx.c, src/segments.c, src/segments.h,
+ src/segmentsx.c:
+ Remove segment->next1 since it always points at the next segment or nowhere.
+
+ * src/profiles.c: Remove track from valid types for most transports.
+
+2009-02-15 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/optimiser.c, src/router.c:
+ Change some function names.
+
+ * src/osmparser.c: Add in tests for motorcar=1 etc.
+
+ * src/nodes.c, src/nodes.h, src/router.c:
+ The search to find a node given the lat/long now searches harder.
+
+ * src/optimiser.c: Better test for failing to find a route.
+
+ * src/router.c: Change --only-super to --super.
+
+ * src/nodesx.c, src/optimiser.c, src/osmparser.c, src/router.c, src/segments.c,
+ src/segmentsx.c, src/types.h, src/nodes.c:
+ Store radians rather than degrees.
+
+ * src/segments.c, src/segmentsx.c:
+ Change to sinf(), cosf(), sqrtf(), asinf() functions.
+
+ * src/optimiser.c:
+ Set the sortby parameter to the minimum distance/duration consistent with the
+ travelled distance/duration and the remaining straight line distance with the
+ fastest possible speed.
+
+ * src/filedumper.c, src/nodes.c, src/nodes.h, src/nodesx.c, src/types.h:
+ Add macros for handling lat/long to bin conversions.
+
+ * src/osmparser.c: Handle oneway=1 and oneway=-1.
+
+2009-02-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/results.c, src/results.h:
+ Added a new 'sortby' entry to the Result.
+ Changed node_t to index_t.
+
+ * src/router.c: Changed node_t to index_t.
+
+ * src/nodes.c, src/segments.c, src/segments.h:
+ Change the Distance() function to return distance_t.
+
+2009-02-08 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/results.c, src/results.h, src/router.c, src/superx.c:
+ Calculate quickest or shortest, not both.
+
+ * src/optimiser.c, src/profiles.c, src/router.c:
+ Give appropriate error messages if start or end of route are not possible.
+
+2009-02-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/results.c:
+ Slight speedup by doing a linear search when looking up results and not storing
+ in sorted order.
+
+ * src/superx.h, src/superx.c, src/waysx.h, src/waysx.c, src/segmentsx.h, src/segmentsx.c,
+ src/nodesx.h, src/nodesx.c:
+ New file.
+
+ * src/ways.h, src/Makefile, src/filedumper.c, src/functions.h, src/nodes.c, src/nodes.h,
+ src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/router.c, src/segments.c,
+ src/segments.h, src/types.h, src/ways.c:
+ Split the extended data types from the normal data types.
+
+ * src/nodes.c: Return NULL if the node cannot be found.
+
+ * src/Makefile, src/filedumper.c, src/optimiser.c, src/router.c:
+ Add new command line options.
+
+ * src/supersegments.c: Fix some status messages.
+
+ * src/optimiser.c, src/types.h: Routing works with super-nodes now.
+
+2009-02-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/ways.c, src/segments.c, src/segments.h, src/supersegments.c, src/types.h, src/nodes.c,
+ src/nodes.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/functions.h:
+ Segments now not duplicated in database.
+ Routing with all nodes works, not with super-nodes.
+
+2009-02-04 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/router.c: Fix usage output.
+
+ * src/ways.c, src/ways.h: Only sort once, don't store the index.
+
+ * src/planetsplitter.c, src/router.c:
+ Use '--*' command line arguments, not '-*'.
+
+ * src/nodes.c, src/router.c, src/segments.c, src/ways.c:
+ Make sure that nodes, segments and ways could be loaded.
+
+ * src/nodes.h, src/optimiser.c, src/router.c, src/segments.c, src/segments.h,
+ src/supersegments.c, src/types.h, src/filedumper.c, src/nodes.c:
+ Sort the nodes geographically and take coordinates as command line arguments.
+
+2009-02-02 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/ways.c, src/ways.h, src/nodes.c, src/nodes.h, src/osmparser.c, src/segments.c,
+ src/segments.h, src/supersegments.c, src/types.h:
+ More variable and function name changes.
+
+2009-02-01 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/profiles.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c,
+ src/ways.c, src/ways.h, src/files.c, src/functions.h, src/nodes.c, src/nodes.h,
+ src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/filedumper.c:
+ Rename some variable types.
+
+2009-01-31 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segments.c, src/segments.h, src/supersegments.c, src/types.h, src/ways.c, src/ways.h,
+ src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/planetsplitter.c,
+ src/profiles.h, src/router.c:
+ Intermediate version during code cleanup.
+
+ * src/optimiser.c, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h,
+ src/functions.h, src/nodes.h:
+ Intermediate checkin, routing now working.
+
+ * src/Makefile:
+ Don't print out anything when creating the dependencies directory.
+
+ * src/planetsplitter.c, src/router.c:
+ Add command line options to specify the directory and filename prefix.
+
+2009-01-30 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/results.c, src/planetsplitter.c: Remove gcc warning.
+
+ * src/Makefile: Move dependencies to subdir.
+
+ * src/osmparser.c: Remove gcc warning.
+
+2009-01-29 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/planetsplitter.c,
+ src/router.c, src/segments.c, src/segments.h, src/supersegments.c:
+ Intermediate version while transitioning data format for nodes and segments.
+
+2009-01-28 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/osmparser.c,
+ src/planetsplitter.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c,
+ src/ways.h:
+ Intermediate version while transitioning data format for nodes and segments.
+
+2009-01-27 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c,
+ src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c,
+ src/ways.c, src/ways.h:
+ Intermediate version while transitioning data format for nodes and segments.
+
+2009-01-26 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/planetsplitter.c, src/segments.c, src/segments.h,
+ src/supersegments.c, src/ways.c, src/ways.h, src/filedumper.c, src/files.c, src/functions.h,
+ src/optimiser.c:
+ Change Segment to contain index of way not its real ID.
+ Don't store the real way ID to save space.
+
+2009-01-25 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segments.c, src/segments.h:
+ Slightly speed up the Duration calculation by changing the macro.
+
+ * src/osmparser.c, src/profiles.c, src/ways.c, src/ways.h:
+ Fix misspelling of Unclassified.
+
+ * src/planetsplitter.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.h,
+ src/optimiser.c:
+ Change the segment->way so that it contains the index of the way, not the id.
+
+ * src/profiles.c, src/profiles.h: New file.
+
+ * src/ways.c, src/ways.h, src/Makefile, src/functions.h, src/optimiser.c, src/osmparser.c,
+ src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h:
+ Added profiles to define speed and allowed highways.
+ Added new options to planetsplitter and router to use the profiles.
+
+2009-01-24 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c: Changed some variable names for clarity.
+
+ * src/planetsplitter.c: Print more information about progress.
+ Don't quit until 99.9% unchanged.
+
+ * src/optimiser.c, src/results.c, src/results.h, src/supersegments.c:
+ Change the Results structure so that the real data doesn't need to be realloc().
+ Add functions to access the first and subsequent elements of the Results structure.
+
+2009-01-23 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/osmparser.c, src/planetsplitter.c:
+ Fix bug with not specifying a method of transport.
+
+ * src/optimiser.c, src/router.c: Proper check that it was unroutable.
+
+ * src/functions.h, src/optimiser.c, src/planetsplitter.c, src/supersegments.c:
+ Remove "iteration" as function argument.
+
+ * src/functions.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/router.c,
+ src/ways.c, src/ways.h:
+ Add command line options to planetsplitter and router.
+ Select transport type (must be allowed on way for parsing).
+ Select highway types (ignore when parsing or routing).
+
+ * src/ways.h, src/functions.h, src/optimiser.c, src/osmparser.c, src/router.c,
+ src/segments.c, src/segments.h, src/ways.c:
+ Add enumerated type Transport.
+ Replace variables of AllowType with Transport where more appropriate.
+ Replace AllowType with Allowed.
+ Replace WayType with Highway.
+
+ * src/osmparser.c: Only include ways that are not Way_Unknown type.
+
+ * src/osmparser.c: Include permissive access.
+
+ * src/functions.h, src/optimiser.c, src/results.c, src/results.h, src/router.c:
+ Create a large or small results structure depending on how many nodes are
+ expected.
+
+2009-01-22 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/results.h: Increase the number of bins to 64k.
+
+ * src/optimiser.c, src/osmparser.c, src/segments.c, src/segments.h, src/supersegments.c:
+ Remove INVALID_DISTANCE and INVALID_DURATION.
+
+ * src/optimiser.c, src/osmparser.c, src/supersegments.c, src/ways.c, src/ways.h:
+ Removed the Way_TYPE() macro.
+
+ * src/results.c, src/results.h, src/optimiser.c:
+ Move queue functions into results.c.
+
+ * src/filedumper.c, src/nodes.c, src/nodes.h, src/planetsplitter.c, src/router.c:
+ Nodes, Segments, Ways - Nodes, Segments, Ways.
+
+ * src/filedumper.c, src/nodes.c, src/nodes.h, src/segments.c, src/segments.h, src/ways.c,
+ src/ways.h:
+ Remove the choice of indexed or non-indexed data structures.
+
+2009-01-21 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c:
+ Various small speed-ups including not-reversing direction.
+
+ * src/functions.h, src/optimiser.c, src/osmparser.c, src/router.c, src/segments.c,
+ src/segments.h, src/supersegments.c, src/ways.c, src/ways.h:
+ Calculate way speeds at routing time.
+
+ * src/supersegments.c:
+ Add reverse-oneway segments when creating supernodes.
+ Check incoming oneway streets as well as outgoing ones.
+
+ * src/osmparser.c: Don't change speed on roundabouts.
+
+2009-01-20 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/planetsplitter.c:
+ Add command line options for skipping parsing and iteration limit.
+
+ * src/optimiser.c, src/osmparser.c, src/segments.c, src/segments.h, src/supersegments.c:
+ Remove duration from segment, calculate duration depending on speed.
+
+2009-01-19 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/optimiser.c, src/planetsplitter.c, src/supersegments.c:
+ Iteratively calculate the super-segments.
+
+ * src/ways.h: Redefine Way_TYPE() to include one-way status.
+
+2009-01-18 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/supersegments.c:
+ Fix problems with way-type matching and duplicated/missing super-segments.
+
+ * src/functions.h, src/optimiser.c, src/router.c: Print out a GPX file.
+
+ * src/optimiser.c, src/filedumper.c, src/functions.h, src/planetsplitter.c, src/router.c,
+ src/segments.c, src/segments.h, src/supersegments.c, src/ways.c, src/ways.h:
+ Added Super-Ways and allow user to select method of transport.
+
+ * src/segments.c: Fix for changes made to ways.
+
+ * src/supersegments.c:
+ Ensure that supernodes are inserted wherever the way type changes.
+
+ * src/osmparser.c: Fill in the extra way information.
+
+ * src/ways.h:
+ Store more information about a way (allowed modes of transport).
+
+ * src/filedumper.c: Fix output printing.
+
+ * src/router.c: Print an error if no route can be found.
+
+ * src/optimiser.c:
+ Fix bugs when start and/or finish nodes are supernodes.
+
+2009-01-17 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/Makefile: Add the option to create assembler output files.
+
+ * src/optimiser.c, src/results.c, src/results.h, src/supersegments.c:
+ Change the contents of the results data structure.
+
+ * src/router.c: Added an option to not print the result.
+
+2009-01-16 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/results.h, src/router.c:
+ Speed optimisation by changing the contents of the Results structure.
+
+ * src/optimiser.c:
+ Don't bother calculating the distance to go, it takes too long.
+
+2009-01-14 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/planetsplitter.c: Remove bad segments and non-way nodes.
+
+ * src/nodes.c, src/nodes.h: Remove nodes which are not in highways.
+ Fix the sorting and create indexes after sorting, not before saving.
+
+ * src/segments.c, src/segments.h:
+ Remove bad segments (repeated consecutive nodes and duplicate segments).
+ Fix the sorting and create indexes after sorting, not before saving.
+
+ * src/supersegments.c: Use invalid distances properly.
+
+ * src/ways.c:
+ Fix the sort algorithm and update the indexes after sorting, not before saving.
+
+ * src/optimiser.c: Fix the bug with merging the results.
+ Fix the bug with not clearing the results structure properly.
+
+ * src/osmparser.c:
+ Add segments that correspond to the wrong way along one-way routes with an
+ invalid distance.
+
+2009-01-11 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/optimiser.c, src/router.c:
+ Routes correctly using super-nodes (not Lands End to John O'Groats though).
+
+ * src/filedumper.c, src/functions.h, src/optimiser.c, src/planetsplitter.c, src/router.c,
+ src/segments.h, src/supersegments.c:
+ Replace Junction with SuperNode.
+
+ * src/nodes.c, src/nodes.h, src/segments.h, src/ways.c, src/ways.h:
+ Some small changes to the nodes, segments and ways functions.
+
+ * src/Makefile, src/filedumper.c, src/functions.h, src/optimiser.c, src/planetsplitter.c,
+ src/results.h, src/router.c, src/segments.c, src/segments.h, src/supersegments.c:
+ Working version with supersegments and junctions.
+
+2009-01-10 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/ways.c, src/ways.h, src/osmparser.c, src/segments.c:
+ Store more information about ways.
+
+ * src/results.h, src/results.c: New file.
+
+ * src/Makefile, src/optimiser.c:
+ Move the results data type into new files.
+
+ * src/nodes.h, src/segments.h, src/ways.h:
+ Increase the increment for the indexed array case.
+
+ * src/ways.h, src/Makefile, src/filedumper.c, src/functions.h, src/nodes.c, src/nodes.h,
+ src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/router.c, src/segments.c,
+ src/segments.h, src/supersegments.c, src/ways.c:
+ About to add the super-segment functionality using Segments data type to hold
+ them.
+
+ * src/functions.h, src/types.h:
+ Changed after nodes, ways and segment changes.
+
+2009-01-09 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/segments.h: New file.
+
+ * src/segments.c:
+ Changed the format of the segments data type to match the nodes.
+
+ * src/nodes.h: Enable indexed arrays.
+
+ * src/ways.h: New file.
+
+ * src/ways.c:
+ Changed the format of the ways data type to match the nodes.
+
+ * src/nodes.c, src/nodes.h:
+ Changed the format of the nodes data type again.
+
+2009-01-07 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/nodes.h: New file.
+
+ * src/nodes.c: Lots of modifications:
+ Two data structures - in memory (pointers) and in file (array).
+ Data is hashed into multiple bins.
+ Each function takes a nodes structure as an argument.
+
+2009-01-06 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/supersegments.c: New file.
+
+ * src/Makefile, src/filedumper.c, src/functions.h, src/planetsplitter.c, src/types.h:
+ Added SuperSegments data type, but it does nothing yet.
+
+ * src/optimiser.c:
+ Tried to optimise the Queue data type. It was slower than the original.
+
+2009-01-05 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/filedumper.c: Print out the longest segment.
+
+ * src/optimiser.c:
+ Some optimisations. Increase the number of result bins and change
+ find_insert_result() into insert_result().
+
+2009-01-04 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c: Introduced some new data types to simplify the code.
+
+ * src/filedumper.c: Print more useful information.
+
+ * src/segments.c, src/types.h, src/ways.c, src/filedumper.c, src/functions.h, src/nodes.c,
+ src/optimiser.c, src/osmparser.c, src/planetsplitter.c:
+ Changed the node, way and segment functions and data types.
+ Removed 'alloced', shortened the prototype array.
+ Remove the automatic sorting of the data.
+ Added assert statements.
+
+2009-01-03 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/ways.c: New file.
+
+ * src/router.c, src/types.h, src/Makefile, src/filedumper.c, src/functions.h,
+ src/optimiser.c, src/osmparser.c, src/planetsplitter.c:
+ Added the ways to the output.
+
+2009-01-02 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/optimiser.c, src/osmparser.c, src/segments.c, src/types.h:
+ Added macros to convert between distance/km and duration/hours/minutes.
+ Shortened the Segment data type with shorter distances and durations.
+
+2009-01-01 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/functions.h, src/nodes.c, src/planetsplitter.c, src/segments.c, src/types.h:
+ Remove the functions to initialise the node and segment arrays.
+
+ * src/optimiser.c, src/router.c, src/Makefile: Print out the results.
+
+2008-12-31 Andrew M. Bishop <amb@gedanken.demon.co.uk>
+
+ * src/types.h, src/segments.c, src/router.c, src/planetsplitter.c, src/osmparser.c,
+ src/optimiser.c, src/nodes.c, src/functions.h, src/files.c, src/filedumper.c, src/Makefile:
+ New file.
+
--- /dev/null
+doc/INSTALL.txt
\ No newline at end of file
--- /dev/null
+# $Header: /home/amb/routino/RCS/Makefile,v 1.3 2010/05/31 12:44:43 amb Exp $
+#
+# Makefile
+#
+# Part of the Routino routing software.
+#
+# This file Copyright 2009-2010 Andrew M. Bishop
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+FILES=$(wildcard */Makefile)
+DIRS=$(foreach f,$(FILES),$(dir $f))
+
+########
+
+all:
+ for dir in $(DIRS); do \
+ ( cd $$dir && $(MAKE) $@ ); \
+ done
+
+########
+
+clean:
+ for dir in $(DIRS); do \
+ ( cd $$dir && $(MAKE) $@ ); \
+ done
+
+########
+
+distclean: clean
+ for dir in $(DIRS); do \
+ ( cd $$dir && $(MAKE) $@ ); \
+ done
--- /dev/null
+doc/NEWS.txt
\ No newline at end of file
--- /dev/null
+doc/README.txt
\ No newline at end of file
--- /dev/null
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<http://www.gnu.org/licenses/>.
--- /dev/null
+ Routino : Algorithm
+ ===================
+
+
+ This page describes the development of the algorithm that is used in
+ Routino for finding routes.
+
+
+Simplest Algorithm
+------------------
+
+ The algorithm to find a route is fundamentally simple: Start at the
+ beginning, follow all possible routes and keep going until you reach
+ the end.
+
+ While this method does work, it isn't fast. To be able to find a route
+ quickly needs a different algorithm, one that can find the correct
+ answer without wasting time on routes that lead nowhere.
+
+
+Improved Algorithm
+------------------
+
+ The simplest way to do this is to follow all possible segments from the
+ starting node to the next nearest node (an intermediate node in the
+ complete journey). For each node that is reached store the shortest
+ route from the starting node and the length of that route. The list of
+ intermediate nodes needs to be maintained in order of shortest overall
+ route on the assumption that there is a straight line route from here
+ to the end node.
+ At each point the intermediate node that has the shortest potential
+ overall journey time is processed before any other node. From the first
+ node in the list follow all possible segments and place the newly
+ discovered nodes into the same list ordered in the same way. This will
+ tend to constrain the list of nodes examined to be the ones that are
+ between the start and end nodes. If at any point you reach a node that
+ has already been reached by a longer route then you can discard that
+ route since the newly discovered route is shorter. Conversely if the
+ previously discovered route is shorter then discard the new route.
+ At some point the end node will be reached and then any routes with
+ potential lengths longer than this actual route can be immediately
+ discarded. The few remaining potential routes must be continued until
+ they are found to be shorter or have no possibility of being shorter.
+ The shortest possible route is then found.
+
+ At all times when looking at a node only those segments that are
+ possible by the chosen means of transport are followed. This allows the
+ type of transport to be handled easily. When finding the quickest route
+ the same rules apply except that criterion for sorting is the shortest
+ potential route (assuming that from each node to the end is the fastest
+ possible type of highway).
+
+ This method also works, but again it isn't very fast. The problem is
+ that the complexity is proportional to the number of nodes or segments
+ in all routes examined between the start and end nodes. Maintaining the
+ list of intermediate nodes in order is the most complex part.
+
+
+Final Algorithm
+---------------
+
+ The final algorithm that is implemented in the router is basically the
+ one above but with an important difference. Instead of finding a long
+ route among a data set of 8,000,000 nodes (number of highway nodes in
+ UK at beginning of 2010) it finds one long route in a data set of
+ 1,000,000 nodes and a few hundred very short routes in the full data
+ set. Since the time taken to find a route is proportional to the number
+ of nodes the main route takes 1/10th of the time and the very short
+ routes take almost no time at all.
+
+ The solution to making the algorithm fast is therefore to discard most
+ of the nodes and only keep the interesting ones. In this case a node is
+ deemed to be interesting if it is the junction of two segments with
+ different properties. In the algorithm these are classed as
+ super-nodes. Starting at each super-node a super-segment is generated
+ that finishes on another super-node and contains the shortest path
+ along segments with identical properties (and these properties are
+ inherited by the super-segment). The point of choosing the shortest
+ route is that since all segments considered have identical properties
+ they will be treated identically when properties are taken into
+ account. This decision making process can be repeated until the only
+ the most important and interesting nodes remain.
+
+ To find a route between a start and finish point now comprises the
+ following steps (assuming a shortest route is required):
+
+ 1. Find all shortest routes from the start point along normal segments
+ and stopping when super-nodes are reached.
+ 2. Find all shortest routes from the end point backwards along normal
+ segments and stopping when super-nodes are reached.
+ 3. Find the shortest route along super-segments from the set of
+ super-nodes in step 1 to the set of super-nodes in step 2 (taking
+ into account the lengths found in steps 1 and 2 between the
+ start/finish super-nodes and the ultimate start/finish point).
+ 4. For each super-segment in step 3 find the shortest route between
+ the two end-point super-nodes.
+
+ This multi-step process is considerably quicker than using all nodes
+ but gives a result that still contains the full list of nodes that are
+ visited. There are some special cases though, for example very short
+ routes that do not pass through any super-nodes, or routes that start
+ or finish on a super-node. In these cases one or more of the steps
+ listed can be removed or simplified.
+
+Routing Preferences
+
+ One of the important features of Routino is the ability to select a
+ route that is optimum for a set of criteria such as preferences for
+ each type of highway, speed limits and other restrictions and highway
+ properties.
+
+ All of these features are handled by assigning a score to each segment
+ while calculating the route and trying to minimise the score rather
+ than simply minimising the length.
+
+ Segment length
+ When calculating the shortest route the length of the segment is
+ the starting point for the score.
+
+ Speed preference
+ When calculating the quickest route the time taken calculated
+ from the length of the segment and the lower of the highway's
+ own speed limit and the user's speed preference for the type of
+ highway is the starting point for the score.
+
+ Oneway restriction
+ If a highway has the oneway property in the opposite direction
+ to the desired travel and the user's preference is to obey
+ oneway restrictions then the segment is ignored.
+
+ Weight, height, width & length limits
+ If a highway has one of these limits and its value is less than
+ the user's specified requirement then the segment is ignored.
+
+ Highway preference
+ The highway preference specified by the user is a percentage,
+ these are scaled so that the most preferred highway type has a
+ weighted preference of 1.0 (0% always has a weighted preference
+ of 0.0). The calculated score for a segment is divided by this
+ weighted preference.
+
+ Highway properties
+ The other highway properties are specified by the user as a
+ percentage and each highway either has that property or not. The
+ user's property preference is scaled into the range 0.0 (for 0%)
+ to 2.0 (for 100%) to give a weighted preference, a second
+ "non-property" weighted preference is calcuated in the same way
+ after subtracting the user's preference from 100%. If a segment
+ has this property then the calculated score is divided by the
+ weighted preference, if the segment does not have this property
+ then it is divided by the non-property weighted preference.
+
+Implementation
+--------------
+
+ The hardest part of implementing this router is the data organisation.
+ The arrangement of the data to minimise the number of operations
+ required to follow a route from one node to another is much harder than
+ designing the algorithm itself.
+
+ The final implementation uses a separate table for nodes, segments and
+ ways. Each table individually is implemented as a C-language data
+ structure that is written to disk by a program which parses the
+ OpenStreetMap XML data file. In the router these data structures are
+ memory mapped so that the operating system handles the problems of
+ loading the needed data blocks from disk.
+
+ Each node contains a latitude and longitude and they are sorted
+ geographically so that converting a latitude and longitude coordinate
+ to a node is fast as well as looking up the coordinate of a node. The
+ node also contains the location in the array of segments for the first
+ segment that uses that node.
+ Each segment contains the location of the two nodes as well as the way
+ that the segment came from. The location of the next segment that uses
+ one of the two nodes is also stored; the next segment for the other
+ node is the following one in the array. The length of the segment is
+ also pre-computed and stored.
+ Each way has a name, a highway type, a list of allowed types of
+ traffic, a speed limit, any weight, height, width or length
+ restrictions and the highway properties.
+
+ The super-nodes are mixed in with the nodes and the super-segments are
+ mixed in with the segments. For the nodes they are the same as the
+ normal nodes, so just a flag is needed to indicate that they are super.
+ The super-segments are in addition to the normal segments so they
+ increase the database size (by about 10%) and are also marked with a
+ flag.
+
+
+Practicalities
+--------------
+
+ At the time of writing (April 2010) the OpenStreetMap data for Great
+ Britain (taken from GeoFabrik) contains:
+ * 14,675,098 nodes
+ + 8,767,521 are highway nodes
+ + 1,120,297 are super-nodes
+ * 1,876,822 ways
+ + 1,412,898 are highways
+ o 9,316,328 highway segments
+ o 1,641,009 are super-segments
+ * 60,572 relations
+
+ The database files when generated are 41.5 MB for nodes, 121.6 MB for
+ segments and 12.6 MB for ways and are stored uncompressed. By having at
+ least 200 MB or RAM available the routing can be performed with no disk
+ accesses (once the data has been read once).
+
+
+--------
+
+Copyright 2008-2010 Andrew M. Bishop.
--- /dev/null
+ Routino : Configuration
+ =======================
+
+
+ New in version 1.4 of Routino is the use of configuration files to
+ allow more information to be provided to the programs at run-time. The
+ configuration files that are used are:
+ * Tagging transformation rules for the planetsplitter program.
+ * Routing profiles for the router program.
+ * Output translations for the router program.
+
+ In keeping with the nature of the input and output files the
+ configuration files are also XML files. Each of the files uses a custom
+ defined XML schema and an XSD file is provided for each of them.
+
+
+Tag Transformation Rules
+------------------------
+
+ The default name of the tagging transformation rules XML configuration
+ file is tagging.xml in the same directory as the generated database
+ files. Other filenames can be specified on the command line using the
+ --tagging option. When processing the input it is possible to have a
+ different set of tagging rules for each file; for example different
+ rules for different countries.
+
+ The tagging rules allow modifying the highway tags in the source file
+ so that the routing can be performed on a simpler set of tags. This
+ removes the special case tagging rules from the source code into the
+ configuration file where they can be easily modified. Part of the
+ provided tagging.xml file showing the rules for motorway_link and
+ motorway highway types.
+
+<?xml version="1.0" encoding="utf-8"?>
+<routino-tagging>
+
+ <way>
+
+ <if k="highway" v="motorway_link">
+ <set v="motorway"/>
+ </if>
+
+ <if k="highway" v="motorway">
+ <output k="highway"/>
+
+ <output k="motorbike" v="yes"/>
+ <output k="motorcar" v="yes"/>
+ <output k="goods" v="yes"/>
+ <output k="hgv" v="yes"/>
+ <output k="psv" v="yes"/>
+
+ <output k="paved" v="yes"/>
+ <output k="multilane" v="yes"/>
+ <output k="oneway" v="yes"/>
+ </if>
+...
+ <way>
+
+</routino-tagging>
+
+ The rules all have the same format; an if element for matching the
+ input and some set or output elements to either change the input tags
+ or create an output tag. The k and v attributes have the same meaning
+ as the attributes with the same names in the OSM XML file - the tag key
+ and tag value.
+
+ An if rule that has both k and v specified is only applied if a tag
+ exists in the input that matches both. An if rule that has only the k
+ attribute is applied if a tag with that key exists and an if rule that
+ has only the v attribute is applied to all tags with that value.
+
+ For the set and output elements the tag that is created in the input or
+ output tag set uses the k and v attributes specified. If one or both
+ are not specified then the original ones are used.
+
+
+Routing Profiles
+----------------
+
+ The default name of the routing profiles XML configuration file is
+ profiles.xml in the same directory as the database files. Other
+ filenames can be specified on the command line using the --tagging
+ option.
+
+ The purpose of this configuration file is to allow easy modification of
+ the routing parameters so that they do not all need to be specified on
+ the command line. In versions of Routino before version 1.4 the default
+ routing parameters (preferred highways, preferred speeds etc) were
+ contained in the source code, now they are in a configuration file.
+ When calculating a route the --profile option selects the named profile
+ from the configuration file.
+
+ Part of the provided profiles.xml file showing the parameters for
+ transport on foot is shown below:
+
+<?xml version="1.0" encoding="UTF-8" ?>
+<routino-profiles>
+
+ <profile name="foot" transport="foot">
+ <speeds>
+...
+ <speed highway="cycleway" kph="4" />
+ <speed highway="path" kph="4" />
+ <speed highway="steps" kph="4" />
+ </speeds>
+ <preferences>
+...
+ <preference highway="cycleway" percent="95" />
+ <preference highway="path" percent="100" />
+ <preference highway="steps" percent="80" />
+ </preferences>
+ <properties>
+ <property type="paved" percent="50" />
+ <property type="multilane" percent="25" />
+ <property type="bridge" percent="50" />
+ <property type="tunnel" percent="50" />
+ </properties>
+ <restrictions>
+ <oneway obey="0" />
+ <weight limit="0.0" />
+ <height limit="0.0" />
+ <width limit="0.0" />
+ <length limit="0.0" />
+ </restrictions>
+ </profile>
+ <profile name="horse" transport="horse">
+...
+ </profile>
+...
+</routino-profiles>
+
+
+Output Translations
+-------------------
+
+ The default name of the output translations XML configuration file is
+ translations.xml in the same directory as the database files. Other
+ filenames can be specified on the command line using the --translations
+ option.
+
+ The generated HTML and GPX output files (described in the next section)
+ are created using the fragments of text that are defined in this file.
+ Additional languages can be added to the file and are selected using
+ the --language option to the router. If no language is specified the
+ first one in the file is used.
+
+ Part of the provided translations.xml file showing some of the English
+ language (en) translations is shown below:
+
+<?xml version="1.0" encoding="utf-8"?>
+<routino-translations>
+
+ <language lang="en">
+...
+ <turn direction="-4" string="Very sharp left" />
+ <turn direction="-3" string="Sharp left" />
+ <turn direction="-2" string="Left" />
+...
+ <heading direction="-4" string="South" />
+ <heading direction="-3" string="South-West" />
+ <heading direction="-2" string="West" />
+...
+ <route type="shortest" string="Shortest" />
+ <route type="quickest" string="Quickest" />
+ <output-html>
+...
+ </output-html>
+ <output-gpx>
+...
+ </output-gpx>
+ </language>
+</routino-translations>
+
+
+--------
+
+Copyright 2010 Andrew M. Bishop.
--- /dev/null
+ Routino : Data
+ ==============
+
+
+ A router relies on data to be able to find a route.
+
+
+OpenStreetMap Data
+------------------
+
+ The data that is collected by the OpenStreetMap project consists of
+ nodes, ways and relations.
+
+ Node
+ 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).
+
+ Way
+ A way is a collection of nodes that when joined together define
+ something (for example a road, a ralway, a boundary, a building,
+ a lake etc). The ways also have attributes that define them
+ (speed limits, type of road and restrictions for example).
+
+ Relation
+ 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.
+
+
+Router Data
+-----------
+
+ 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
+ the router.
+
+ 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
+ two nodes.
+
+ 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, min height, max weight etc).
+
+ 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 rouing database.
+
+
+--------
+
+Copyright 2008-2010 Andrew M. Bishop.
--- /dev/null
+ Routino : Installation
+ ======================
+
+
+Compilation
+-----------
+
+ This program has been written to run on Linux, no cross-platform
+ compatibility has been specifically included but on the other hand
+ nothing platform specific has been knowingly included either.
+
+ Any information on improving the compilation process on anything other
+ than 32-bit x86 Linux is welcome.
+
+ No external libraries are required and the programs are written in
+ standard C language.
+
+ To compile the programs just type 'make'.
+
+
+Installation
+------------
+
+ After compilation the executable files are copied into the directory
+ web/bin and the default XML configuration files are copied into the
+ directory web/data. This is in preparation for using the supplied
+ example web pages but is also a useful location to copy the files from
+ for normal use.
+
+ The executable files are called 'planetsplitter', 'router' and 'filedumper'
+ (also 'tagmodifier' for debugging tag modifications). They can be copied
+ to any location and need no special installation environment.
+
+ The default configuration files are called 'profiles.xml', 'tagging.xml'
+ and 'translations.xml'. The names of the configuration files can be
+ specified on the command line but by default are also looked for in the
+ directory that contains the routing database.
+
+
+Example Web Page
+----------------
+
+ The directory 'web' contains a set of files that can be used to create a
+ working set of web pages with interfaces to the routing algorithm.
+
+ The files in the 'web' directory will require copying to a location that
+ is accessible by a web server. After copying the files some of them
+ need to be edited; search through the files for lines that contain the
+ words "EDIT THIS" and make appropriate edits. The files that need
+ editing are 'paths.pl' (to set the directory paths) and 'router.js' and
+ 'visualiser.js' to limit the range of the visible map (latitude,
+ longitude and zoom).
+
+
+Configuration of web files
+--------------------------
+
+ The assumption in this description is that the whole of the directory
+ called web is copied into a directory that is accessible by an Apache
+ web server.
+
+ **************************************************************************
+ **** This is not a secure configuration but an easy one to configure. ****
+ **** Only the directory 'www' should be accessible by the web server. ****
+ **** Do not use this configuration unmodified in a public web server. ****
+ **************************************************************************
+
+ The directory structure is as follows:
+
+ web/
+ |
+ + /bin/ <- The Routino executable files (when compiled).
+ |
+ + /data/ <- The Routino database and default configuration
+ | files.
+ |
+ + /results/ <- An empty directory to store the results.
+ |
+ + /www/ <- The files that must be available to the web
+ | server are below this level.
+ |
+ + /openlayers/ <- A directory to hold the OpenLayers scripts.
+ |
+ + /routino/ <- The main HTML, Javascript, CSS and CGI files.
+
+
+ The directory 'bin' will be filled by running the compilation process.
+ For a secure installation the 'bin' directory should be outside of the
+ web server, the file 'www/routino/paths.pl' contains the path to the 'bin'
+ directory.
+
+ The directory 'data' must contain the Routino database and is also the
+ default location for the configuration files. The routing database is
+ created by downloading the OSM files for the region of interest and
+ running the 'planetsplitter' program. There is a script in the directory
+ that will download the OSM files and create the required database. The
+ script should be edited to set the names of the files to be downloaded.
+ For a secure installation the 'data' directory should be outside of the
+ web server, the file 'www/routino/paths.pl' contains the path to the 'data'
+ directory.
+
+ The directory 'results' is a temporary directory that it used to hold the
+ GPX and text files generated by the Routino router. The directory must
+ be writable by the web server process since it is the CGI scripts that
+ are run by the web server that writes the results here. For a secure
+ installation the results directory should be outside of the web server,
+ the file 'www/routino/paths.pl' contains the path to the results
+ directory.
+
+ The directory 'www' and its sub-directories are the only ones that need
+ to be within the web server accessible directory.
+
+ The directory 'www/openlayers' must be filled with the openlayers
+ Javascript library that can be downloaded from
+ http://www.openlayers.org/. (This version of Routino has been tested
+ with OpenLayers library version 2.8). The files must be installed so
+ that the file 'www/openlayers/OpenLayers.js' and the directories
+ 'www/openlayers/img/', 'www/openlayers/theme/' all exist. There is a script
+ in the directory that will automatically download and organise the
+ files.
+
+ The directory 'www/routino' contains the main HTML, Javascript and CSS
+ files as well as the CGI scripts that perform the server-side
+ functions. The description below lists all of the files that contain
+ editable information.
+
+ paths.pl
+ This contains the names of the directories that contain the
+ executable files, router database and temporary results.
+
+ router.pl
+ This file contains the filename prefix for the routing database
+ files (only needed if planetsplitter is run with the --prefix
+ option).
+
+ router.js
+ The parameters in this file control the boundary of the visible
+ map (defaults to UK), the minimum and maximum zoom levels
+ (defaults to between 4 and 15 inclusive) and the source of map
+ tiles (defaults to the main OpenStreetMap tile server).
+
+ visualiser.js
+ The same parameters as in router.js are in this file.
+
+
+Configuration of web server
+---------------------------
+
+ The file 'www/routino/.htaccess' contains all of the Apache configuration
+ options that are required to get the example web pages running. The
+ only problem is that because of the way that the "AllowOverride" option
+ works one of the configuration options has been commented out. This
+ must be enabled in the main Apache server configuration file.
+
+
+--------
+
+Copyright 2008-2010 Andrew M. Bishop.
--- /dev/null
+# $Header: /home/amb/routino/doc/RCS/Makefile,v 1.2 2010/07/07 17:27:03 amb Exp $
+#
+# Documentation directory Makefile
+#
+# Part of the Routino routing software.
+#
+# This file Copyright 2010 Andrew M. Bishop
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+WEBDIR=../web/www/routino/documentation
+
+FILES=html/*
+
+########
+
+all :
+ -@[ -d $(WEBDIR) ] && \
+ for file in $(FILES); do \
+ if [ ! -f $(WEBDIR)/`basename $$file` ] || [ $$file -nt $(WEBDIR)/`basename $$file` ]; then \
+ echo cp $$file $(WEBDIR) ;\
+ cp -f $$file $(WEBDIR) ;\
+ fi ;\
+ done
+
+########
+
+clean:
+ rm -f *~
+ rm -f html/*~
+ rm -f $(WEBDIR)/*~
+
+########
+
+distclean: clean
+ rm -f $(WEBDIR)/*
--- /dev/null
+Version 1.4.1 of Routino released : Sat Jul 10 2010
+---------------------------------------------------
+
+Bug fixes:
+ Don't crash if start and finish are the same point.
+ Don't crash if several translations but --language option not used.
+ Don't crash if middle part of route cannot be found.
+ Don't allocate so much memory for intermediate nodes; routes much faster.
+ Fix problem with finding closest segment to the specified point.
+
+Documentation:
+ Provide HTML versions of the documentation (copy to web directory at install).
+ Change URL for website to http://www.routino.org/.
+
+Configuration Files:
+ Added German translations.
+
+planetsplitter
+ Slight change to algorithm for finding super-nodes.
+
+Web pages:
+ Provide HTML versions of the documentation.
+ Change URL for website to http://www.routino.org/.
+ Provide updated HTML files, the same as on the website.
+ Change to OpenLayers v2.9.1 and build custom version if Python available.
+
+
+Version 1.4 of Routino released : Mon May 31 2010
+-------------------------------------------------
+
+Bug fixes:
+ Speed up start/via/stop point within segment search algorithm.
+ If no segment is found don't try routing but exit with error.
+ Improve the error messages by adding operating system error info to them.
+ Rewrite of tagging rules fixes bug with wheelchair access allow/deny.
+ Files greater than 2GB can be read/written on 32-bit systems.
+ Fix bug with profile preferences when optimising a route.
+ Stricter check on profile validity before starting routing.
+
+planetsplitter
+ Add --parse-only and --process-only options (for incremental parsing).
+ Allow filenames to be specified on command line (default is still stdin).
+ Improved the '--help' information to describe all options.
+ Remove --transport, --not-highway, --not-property options (use config file).
+ Use tag transformation rules in configuration file not hard-coded.
+
+router
+ Removed compiled-in profiles and use profiles loaded from XML file.
+ Improved the '--help' information to describe all options.
+ Change the name of the --profile-json and --profile-perl options.
+ Allow selection of the outputs to generate (or none).
+ Added HTML route instructions output.
+ GPX route file contains instructions at each waypoint.
+ Read in XML file of translated words/phrases for outputs.
+ Added options to specify file of translations and language to use.
+ Remove copyright.txt file and put information into translations file.
+
+filedumper
+ Improved the '--help' information to describe all options.
+ Added the option to dump an OSM file containing database contents.
+
+Web Pages
+ Combined generic map CSS into one file (not copied in two).
+ Much better support for IE6/7/8 with browser detection but not perfect.
+ Re-organised and tidied up the Javascript.
+ Added button next to waypoints to centre it on map.
+ Added button next to waypoints to set as home location (uses browsser cookie).
+ Create shorter URLs for custom map (ignore default values).
+ Reduced and clarified the amount of editing to customise the Javascript.
+ Made it easier to translate by moving text out of Javascript (not visualiser).
+ Prepared for translated versions of web page (Apache Multiviews).
+ Added option to select language of output.
+ Use HTML output from router to get translated instructions.
+
+
+Version 1.3 of Routino released : Thu Jan 21 2010
+-------------------------------------------------
+
+Bug fixes:
+ Ensure output even if the distance between two adjacent route points is small.
+ Correct the determination of waypoints for abbreviated output.
+ Check the command line values for filedumper --dump options.
+ Made the verbose output consistent between different places.
+
+OSM tagging
+ Recognise "designation" tag to determine designated paths.
+ Recognise "steps" tag to determine the highway type.
+ Recognise "wheelchair" tag to determine if wheelchairs are allowed on highway.
+ Recognise "moped" tag to determine if mopeds are allowed on a highway.
+ Recognise "surface" and "paved" tags to determine if a highway is paved.
+ Recognise "lanes" tag to determine if a highway has multiple lanes.
+ Recognise "bridge" tag to determine if a highway is a bridge.
+ Recognise "tunnel" tag to determine if a highway is a tunnel.
+
+New Features
+ Remove "bridleway" and "footway" highway types and use "path" highway instead.
+ Added "steps" as a new highway type separate from the "path" type.
+ Added "wheelchair" and "moped" to the list of possible transports.
+ Added "paved", "multilane", "bridge", "tunnel" to list of highway properties.
+
+Web Pages
+ Updated for new features listed above.
+ Added popup to display instructions for each step in route on mouse-over.
+ Added buttons next to waypoints for: add / remove / move up / move down.
+ Highlight user selectable parts of form in yellow on mouse-over.
+ A few small changes, improved CSS, improved Javascript.
+
+router
+ For each waypoint choose closest point on a segment and not just closest node.
+ Added the ability to set preferences based on highway properties.
+ Changed the text output formats to include bearing and turn information.
+
+
+Version 1.2 of Routino released : Wed Oct 21 2009
+-------------------------------------------------
+
+OSM tagging
+ Recognise tags "vehicle" and "motor_vehicle".
+ Handle duplicate ways in the input OSM file (e.g. concatenation of 2 files).
+
+Database
+ Identical ways are combined to reduce database size (~80% fewer ways stored).
+
+Routing
+ Fix weight, height, width, length restriction routing.
+ Allow up to 99 waypoints to be specified instead of 9.
+
+Visualiser
+ Don't display speed limits for tracks and paths unless a value is set.
+ Draw all super-segments that cross the selected boundary.
+
+Web Pages
+ A few small changes, improved CSS, improved Javascript.
+ Changed marker colour when waypoint not selected.
+
+planetsplitter
+ Optional slim mode uses minimal memory at the expense of temporary files.
+
+router
+ Less CPU time for routing (~30% less).
+
+filedumper
+ Allow dumping individual nodes, segments and ways (for debug).
+
+
+Version 1.1 of Routino released : Sat Jun 13 2009
+-------------------------------------------------
+
+Inputs
+ Improve parsing of OSM file (imperial units).
+ Ignore nodes that are missing from the input OSM file.
+
+Outputs
+ Create GPX route files as well as GPX track files.
+ Read in an optional copyright.txt file and include contents in output.
+ Make better choices about what to output in the abbreviated text file.
+
+Routing
+ Allow generating a route with intermediate waypoints.
+ Use preferences for highway types instead of yes/no choice.
+ Choice of closest node to start/finish points ensures transport allowed.
+
+Visualiser
+ Added data extraction function for viewing routing database data.
+
+Web Pages
+ Include full set of web pages for creating customised online router.
+
+Documentation
+ Included NEWS.txt file.
+ Included documentation for installation of web pages.
+
+
+Version 1.0 of Routino released : Wed Apr 08 2009
+-------------------------------------------------
+
+First version.
--- /dev/null
+ Routino : Output
+ ================
+
+
+ There are three different formats of output from the router, HTML, GPX
+ (GPS eXchange) XML format and plain text with a total of five possible
+ output files:
+ * HTML route instructions for each interesting junction.
+ * GPX track file containing every node.
+ * GPX route file with waypoints at interesting junctions.
+ * Plain text description with the interesting junctions.
+ * Plain text file with every node.
+
+ The "interesting junctions" referred to above are junctions where the
+ route changes to a different type of highway, more than two highways of
+ the same type meet, or where the route meets but does not take a more
+ major highway. When the route follows a major road this definition
+ eliminates all junctions with minor roads.
+
+ The output files are written to the current directory and are named
+ depending on the selection of shortest or quickest route. For the
+ shortest route the file names are "shortest.html",
+ "shortest-track.gpx", "shortest-route.gpx", "shortest.txt" and
+ "shortest-all.txt", for the quickest route the names are
+ "quickest.html", "quickest-track.gpx", "quickest-route.gpx",
+ "quickest.txt" and "quickest-all.txt".
+
+ The HTML file and GPX files are written out according to the selected
+ language using the translations contained in the translations.xml
+ configuration file.
+
+
+HTML Route Instructions
+-----------------------
+
+ The HTML route instructions file contains one line for each of the
+ interesting junctions in the route and one line for the highway that
+ connects them.
+
+ An example HTML file output is below (some parts are missing, for
+ example the style definitions):
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+<!-- Creator : Routino - http://www.routino.org/ -->
+<!-- Source : Based on OpenStreetMap data from http://www.openstreetmap.org/ -->
+<!-- License : http://creativecommons.org/licenses/by-sa/2.0/ -->
+<HEAD>
+<TITLE>Shortest Route</TITLE>
+...
+</HEAD>
+<BODY>
+<H1>Shortest Route</H1>
+<table>
+<tr class='c'><td class='l'><td class='r'>51.524677 -0.127896
+<tr class='n'><td class='l'>Start:<td class='r'>At <span class='w'>Waypoint</span>, head <span class='b'>South-East</span>
+
+<tr class='s'><td class='l'>Follow:<td class='r'><span class='h'>Russell Square</span> for <span class='d'>0.391 km, 0.5 min</span> [<span class='j'>0.4 km, 0 minutes</span>]
+...
+<tr class='t'><td class='l'>Total:<td class='r'><span class='j'>6.3 km, 5 minutes</span>
+<tr><td class='l'>Stop:<td class='r'><span class='w'>Waypoint</span>
+</table>
+</BODY>
+</HTML>
+
+ The coordinates are included in the file but are not visible because of
+ the style definitions.
+
+
+GPX Track File
+--------------
+
+ The GPX track file contains a track with all of the individual nodes
+ that the route passes through.
+
+ An example GPX track file output is below:
+
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="Routino" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://www.topografix.com/GPX/1/1"
+ xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
+<desc>Creator : Routino - http://www.routino.org/</desc>
+<copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/">
+<license>http://creativecommons.org/licenses/by-sa/2.0/</license>
+</copyright>
+</metadata>
+<trk>
+<name>Shortest route</name>
+<desc>Shortest route between 'start' and 'finish' waypoints</desc>
+<trkpt lat="51.524677" lon="-0.127896"/>
+<trkpt lat="51.523830" lon="-0.126993"/>
+...
+<trkpt lat="51.478353" lon="-0.103561"/>
+<trkpt lat="51.478244" lon="-0.103652"/>
+</trkseg>
+</trk>
+</gpx>
+
+
+GPX Route File
+--------------
+
+ The GPX route file contains a route (ordered set of waypoints) with all
+ of the interesting junctions that the route passes through.
+
+ An example GPX route file output is below:
+
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="Routino" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://www.topografix.com/GPX/1/1"
+ xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
+<desc>Creator : Routino - http://www.routino.org/</desc>
+<copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/">
+<license>http://creativecommons.org/licenses/by-sa/2.0/</license>
+</copyright>
+</metadata>
+<rte>
+<name>Shortest route</name>
+<desc>Shortest route between 'start' and 'finish' waypoints</desc>
+<rtept lat="51.524677" lon="-0.127896"><name>START</name>
+<desc>South-East on 'Russell Square' for 0.391 km, 0.5 min</desc></rtept>
+<rtept lat="51.521815" lon="-0.124577"><name>TRIP001</name>
+<desc>South-East on 'Russell Square' for 0.055 km, 0.1 min</desc></rtept>
+...
+<rtept lat="51.478244" lon="-0.103652"><name>FINISH</name>
+<desc>Total Journey 6.3 km, 5 minutes</desc></rtept>
+</rte>
+</gpx>
+
+
+Text File
+---------
+
+ The text file format contains one entry for all of the interesting
+ junctions in the route and is intended to be easy to interpret.
+
+ An example text file output is below:
+
+# Creator : Routino - http://www.routino.org/
+# Source : Based on OpenStreetMap data from http://www.openstreetmap.org/
+# License : http://creativecommons.org/licenses/by-sa/2.0/
+#
+#Latitude Longitude Section Section Total Total Point Turn Bearing Highway
+# Distance Duration Distance Duration Type
+ 51.524677 -0.127896 0.000 km 0.0 min 0.0 km 0 min Waypt +3
+ 51.521815 -0.124577 0.391 km 0.5 min 0.4 km 0 min Junct +0 +3 Russell Square
+...
+ 51.478353 -0.103561 0.598 km 0.4 min 6.2 km 5 min Junct +2 -3 Camberwell New Road (A202)
+ 51.478244 -0.103652 0.013 km 0.0 min 6.3 km 5 min Waypt Vassall Road
+
+ The text file output contains a header (indicated by the lines starting
+ with '#') and then one line for each junction. Each line contains the
+ information for the route up to that point and the direction to go
+ next. For each of the lines the individual fields contain the
+ following:
+
+ Latitude - Location of the point (degrees)
+
+ Longitude - Location of the point (degrees)
+
+ Section Distance - The distance travelled on the section of the journey
+ that ends at this point (defined on this line).
+
+ Section Duration - The duration of travel on the section of the journey
+ that ends at this point (defined on this line).
+
+ Total Distance - The total distance travelled up to this point.
+
+ Total Duration - The total duration of travel up to this point.
+
+ Point Type - The type of point; either a waypoint Waypt or junction
+ Junct.
+
+ Turn - The direction to turn at this point (missing for the first point
+ since the journey has not started yet and the last point because it has
+ finished). This can take one of nine values between -4 and +4 defined
+ by: 0 = Straight, +2 = Right, -2 = Left and +/-4 = Reverse.
+
+ Bearing - The direction to head at this point (missing for the last point
+ since the journey has finished). This can take one of nine values
+ between -4 and +4 defined by: 0 = North, +2 = East, -2 = West and +/-4
+ = South.
+
+ Highway - The name (or description) of the highway to follow (missing on
+ the first line).
+
+ The individual items are separated by tabs but some of the items
+ contain spaces as well.
+
+
+All Nodes Text File
+-------------------
+
+ The all nodes text file format contains one entry for each of the nodes
+ on the route.
+
+ An example all nodes text file output is below:
+
+# Creator : Routino - http://www.routino.org/
+# Source : Based on OpenStreetMap data from http://www.openstreetmap.org/
+# License : http://creativecommons.org/licenses/by-sa/2.0/
+#
+#Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway
+# Dist Durat'n Dist Durat'n
+ 51.524677 -0.127896 7485978* Waypt 0.000 0.00 0.00 0.0
+ 51.523830 -0.126993 7485047* Junct 0.113 0.14 0.11 0.1 96 146 Woburn Place
+...
+ 51.478353 -0.103561 7576939* Junct 0.104 0.07 6.25 5.0 96 126 Camberwell New Road (A202)
+ 51.478244 -0.103652 7581605 Waypt 0.013 0.01 6.26 5.0 64 207 Vassall Road
+
+ The all nodes text file output is similar to the text file output
+ except that a line is printed for each of the nodes rather than just
+ the interesting junctions. For each of the lines the individual fields
+ contain the following:
+
+ Latitude - Location of the point in degrees.
+
+ Longitude - Location of the point in degrees.
+
+ Node - The internal node number and an indicator "*" if the node is a
+ super-node.
+
+ Type - The type of point; a waypoint Waypt, junction Junct, change of
+ highway Change or intermediate node Inter.
+
+ Segment Distance - The distance travelled on the segment defined on this
+ line.
+
+ Segment Duration - The duration of travel on the segment defined on this
+ line.
+
+ Total Distance - The total distance travelled up to this point.
+
+ Total Duration - The total duration of travel up to this point.
+
+ Speed - The speed of travel on the segment defined on this line (missing
+ on the first line).
+
+ Bearing - The direction that the segment defined on this line travels in
+ degrees (missing on the first line).
+
+ Highway - The name (or description) of the highway segment (missing on
+ the first line).
+
+
+--------
+
+Copyright 2008-2010 Andrew M. Bishop.
--- /dev/null
+ Routino : OpenStreetMap Routing Software
+ ========================================
+
+
+ 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,
+ motorbike 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 oneway 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 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:
+
+ http://www.routino.org/uk/router.html
+
+ The source code download available 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 Javascript
+ library from http://www.openlayers.org/.
+
+
+Documentation
+-------------
+
+ The algorithm used is described in the file ALGORITHM.txt and some
+ notes about the limitations of the data is in DATA.txt.
+
+ The configuration files and in particular the default set of rules for
+ processing the OpenStreetMap data tags are described in detail in
+ CONFIGURATION.txt and TAGGING.txt. The format of the output files
+ generated are described in OUTPUT.txt.
+
+ Detailed information about how to use the programs is available in the
+ file USAGE.txt and how to install it is in INSTALL.txt.
+
+
+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.
+
+
+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-2010.
+
+ Contact amb@gedanken.demon.co.uk for any questions or queries.
+
+
+Homepage
+--------
+
+ The latest information about the program can be found on the homepage:
+
+ http://www.routino.org/
+
+
+Download
+--------
+
+ The program can be downloaded from:
+
+ http://www.routino.org/download/
+
+
+--------
+
+Copyright 2008-2010 Andrew M. Bishop.
--- /dev/null
+ Routino : Tagging Rules
+ =======================
+
+
+ The different tags and attributes in the OSM format XML that are used
+ by Routino are described below.
+
+ An important change for version 1.4 of Routino is that the tags in the
+ input file are first processed according to a set of rules defined in a
+ configuration file. This means that the information presented here is
+ in two parts; firstly the tags that are recognised by Routino after
+ pre-processing and secondly the transformations in the default
+ configuration file.
+
+
+Tags Recognised After Processing
+--------------------------------
+
+ This section describes the tags that are recognised by Routino after
+ the tag transformations have been applied. This is therefore a much
+ reduced set of tags compared to the original OSM data and also includes
+ tags which are specific to Routino.
+
+ In all cases of tag processing values of true, yes, 1 are recognised as
+ being affirmative and any other value is ignored.
+
+
+Node Tags And Attributes
+------------------------
+
+ None of the node tags are used but the node attributes id, latitude and
+ longitude of the node. The id atribute is required to associate the
+ node with the ways and the position attributes are required to locate
+ the node.
+
+
+Way Tags And Attributes
+-----------------------
+
+ The tags from the ways in the data are the ones that provide most of
+ the information for routing. The id attribute is used only so that the
+ many segments associated with a way can be share a set of tags taken
+ from the way.
+
+The highway Tag
+- - - - - - - -
+
+ The most important tag that is used from a way is the highway tag. This
+ defines the type of highway that the way represents. Any way that does
+ not have a highway tag is discarded.
+
+ There are more highway types defined than are used by the router. The
+ subset that the router uses are:
+ * motorway
+ * trunk
+ * primary
+ * secondary
+ * tertiary
+ * unclassified
+ * residential
+ * service
+ * track
+ * cycleway
+ * path (1)
+ * steps (2)
+
+ Note 1: This changed in version 1.3 of Routino - the bridleway and
+ footway types were included within the path highway type.
+ Note 2: This changed in version 1.3 of Routino - the steps type was
+ separated from the footway type.
+
+Transport Specific Tags
+- - - - - - - - - - - -
+
+ One tag is recognised for each of the different modes of transport:
+ foot, horse, bicycle, wheelchair, moped, motorbike, motorcar, goods,
+ hgv and psv. These indicate whether the specific type of transport is
+ allowed on the highway or not.
+
+The name Tag
+- - - - - -
+
+ The name tag is used to provide the label for the highway when printing
+ the results.
+
+The ref Tag
+- - - - - -
+
+ The ref tag is used to provide the label for the highway when printing
+ the results.
+
+The junction Tag
+- - - - - - - -
+
+ The junction tag is used to check if a highway is (part of) a
+ roundabout. This tag is used for information to label the highway if no
+ other name is provided.
+
+The multilane Tag
+- - - - - - - - -
+
+ The multilane tag is used to identify whether a highway has multiple
+ lanes for traffic and this sets one of the highway properties. There is
+ not normally a multilane tag but one needs to be added by the tag
+ processing transformations. Values of true, yes, 1 are recognised.
+
+The paved Tag
+- - - - - - -
+
+ The paved tag is used to identify whether a highway is paved or not,
+ this is one of the available highway properties. A paved tag may exist
+ in the original data but normally the surface tag needs to be
+ transformed into the paved tag.
+
+The bridge Tag
+- - - - - - -
+
+ The bridge tag is used to identify whether a highway is a bridge and
+ therefore set one of the available properties.
+
+The tunnel Tag
+- - - - - - -
+
+ The tunnel tag is used to identify whether a highway is a tunnel and
+ therefore set one of the available properties.
+
+The oneway Tag
+- - - - - - -
+
+ The oneway tag is used to specify that traffic is only allowed to
+ travel in one direction.
+
+The maxspeed Tag
+- - - - - - - -
+
+ The maxspeed tag is used to specify the maximum speed limit on the
+ highway; this is always measured in km/hr in OpenStreetMap data. If the
+ tag value contains "mph" then it is assumed to be a value in those
+ units and converted to km/hr.
+
+The maxweight Tag
+- - - - - - - - -
+
+ The maxweight tag is used to specify the maximum weight of any traffic
+ on the way. In other words this must be set to the heaviest weight
+ allowed on the way (for example a bridge) in tonnes. If the tag value
+ contains "kg" then it is assumed that the value is in these units and
+ converted to tonnes.
+
+The maxheight Tag
+- - - - - - - - -
+
+ The maxheight tag is used to specify the maximum height of any traffic
+ on the way. In other words this must be set to the lowest height of
+ anything above the way (like a bridge) in metres. If the tag value
+ contains a measurement in feet or feet and inches then attempts are
+ made to convert this to metres.
+
+The maxwidth Tag
+- - - - - - - -
+
+ The maxwidth tag is used to specify the maximum width of any traffic on
+ the way. This must be set to the minimum width of the contraints at the
+ wayside in metres. If the tag value contains a measurement in feet or
+ feet and inches then attempts are made to convert this to metres.
+
+The maxlength Tag
+- - - - - - - - -
+
+ The maxlength tag is used to specify the maximum length of any traffic
+ on the way (usually from a traffic sign) in metres. If the tag value
+ contains a measurement in feet or feet and inches then attempts are
+ made to convert this to metres.
+
+
+Relation Tags And Attributes
+----------------------------
+
+ Currently no relation tags or attributes are used.
+
+
+Tag Transformations
+-------------------
+
+ This section describes the set of tag transformations that are
+ contained in the default configuration file. The configuration file
+ tagging rules are applied in sequence and this section of the document
+ is arranged in the same order.
+
+
+Node Tag Transformations
+------------------------
+
+ No transformations are applicable since no node tags are recognised.
+
+
+Way Tag Transformations
+-----------------------
+
+Highway Defaults
+- - - - - - - -
+
+ The first part of the tag transformations is to decide on defaults for
+ each type of highway. This uses the highway tag in the OSM file and
+ maps it into one of the highway tags that are recognised by Routino,
+ defining the default allowed transport types and adding a number of
+ properties.
+
+ The first part of the transformation is to convert the highway tag into
+ one that is recognised by Routino.
+
+ Original tag Transformed tag
+ ------------ ---------------
+ bridleway path
+ byway track
+ footway path
+ living_street residential
+ minor unclassified
+ pedestrian path
+ road unclassified
+ services service
+ unsurfaced track
+ unpaved track
+ walkway path
+
+ The type of highway also determines the defaults for the types of
+ transport allowed on the highway. The default assumptions are as shown
+ in the table below.
+
+ Highway foot horse wheelchair bicycle moped motorbike motorcar goods hgv psv
+ ------- ---- ----- ---------- ------- ----- --------- -------- ----- --- ---
+ motorway no no no no no yes yes yes yes yes
+ trunk no no no yes yes yes yes yes yes yes
+ primary yes yes yes yes yes yes yes yes yes yes
+ secondary yes yes yes yes yes yes yes yes yes yes
+ tertiary yes yes yes yes yes yes yes yes yes yes
+ unclassified yes yes yes yes yes yes yes yes yes yes
+ residential yes yes yes yes yes yes yes yes yes yes
+ service yes yes yes yes yes yes yes yes yes yes
+ track yes yes yes yes no no no no no no
+ cycleway yes no yes yes no no no no no no
+ path yes yes(1) yes yes(1) no no no no no no
+ steps yes no yes no no no no no no no
+
+ Note 1: A path allows bicycle or horse access by default only if
+ actually labelled as a highway of type "bridleway" or certain values of
+ the designation tag (described below).
+
+ Finally for the highway tag a number of properties are added depending
+ on the highway type.
+
+ Highway Properties
+ ------- ----------
+ motorway paved, oneway, multilane
+ trunk paved
+ primary paved
+ secondary paved
+ tertiary paved
+ unclassified paved
+ residential paved
+ service paved
+ track paved (1)
+ cycleway paved
+ path paved (2)
+ steps
+
+ Note 1: A track is paved only if it is tagged as tracktype=grade1.
+ Note 2: A path is paved only if it was originally tagged as
+ highway=walkway or highway=pedestrian.
+
+Generic Access Permissions
+- - - - - - - - - - - - -
+
+ The access tag is used to specify the default access restrictions on
+ the way. If the tag value is "no" or "private" then all transport types
+ are denied access (later tag transformation rules may add specific
+ transport types back again).
+
+Other Access Permissions
+- - - - - - - - - - - -
+
+ A tag named vehicle means any of the bicycle, moped, motorbike,
+ motorcar, goods, hgv and psv transport types. A tag named motor_vehicle
+ is transformed to mean any vehicle except a bicycle.
+
+ The designation tag is used as an alternative method of identifying the
+ legal right of way on a path (in the UK at least). The tag
+ transformations convert these tags into a set of allowed transport
+ types as shown below.
+
+ Designation tag Equivalent access permissions
+ --------------- -----------------------------
+ bridleway or foot=yes, wheelchair=yes, horse=yes,
+ public_bridleway bicycle=yes
+ restricted_byway foot=yes, wheelchair=yes, horse=yes,
+ bicycle=yes
+ byway foot=yes, wheelchair=yes, horse=yes,
+ bicycle=yes, moped=yes, motorbike=yes,
+ motorcar=yes
+ footpath or foot=yes, wheelchair=yes
+ public_footpath
+
+Specific Access Permissions
+- - - - - - - - - - - - - -
+
+ The final part of the access permissions is to use the specific
+ transport type tags.
+
+ One tag is recognised for each of the different modes of transport:
+ foot, horse, bicycle, wheelchair, moped, motorbike, motorcar, goods,
+ hgv and psv. These indicate whether the specific type of transport is
+ allowed on the highway or not.
+
+Highway Properties
+- - - - - - - - -
+
+ If there is a surface tag then the highway is assumed to be unpaved
+ unless the tag value matches one of the following: paved, asphalt or
+ concrete.
+
+ Support for the obsolete paved tag is also provided and the highway is
+ paved if this is set to a true value.
+
+ The lanes tag is used to identify whether a highway has multiple lanes
+ for traffic or not (the number of lanes is not important in this case,
+ only whether it is more than one) this sets one of the highway
+ properties.
+
+ The bridge and tunnel tags are copied directly from the input to the
+ output.
+
+Highway Restrictions
+- - - - - - - - - -
+
+ The oneway, maxspeed, maxweight, maxheight, maxwidth and maxlength are
+ copied directly from the input to the output without modification.
+
+Highway Names and References
+- - - - - - - - - - - - - -
+
+ The name and ref tags are copied directly from the input to the output.
+
+
+Relation Tag Transformations
+----------------------------
+
+ No transformations are applicable since no relation tags are recognised.
+
+
+--------
+
+Copyright 2008-2010 Andrew M. Bishop.
--- /dev/null
+ Routino : Usage
+ ===============
+
+
+ There are four programs that make up this software. The first one takes
+ the planet.osm datafile from OpenStreetMap (or other source of data
+ using the same formats) and converts it into a local database. The
+ second program uses the database to determine an optimum route between
+ two points. The third program allows visualisation of the data and
+ statistics to be extracted. The fourth program is a test program for
+ the tag transformations.
+
+
+planetsplitter
+--------------
+
+ This program reads in the OSM format XML file and splits it up to
+ create the database that is used for routing.
+
+ Usage: planetsplitter [--help]
+ [--dir=<dirname>] [--prefix=<name>]
+ [--slim] [--sort-ram-size=<size>]
+ [--tmpdir=<dirname>]
+ [--parse-only | --process-only]
+ [--max-iterations=<number>]
+ [--tagging=<filename>]
+ [<filename.osm> ...]
+
+ --help
+ Prints out the help information.
+
+ --dir=<dirname>
+ Sets the directory name in which to save the results. Defaults
+ to the current directory.
+
+ --prefix=<name>
+ Sets the filename prefix for the files that are created.
+ Defaults to no prefix.
+
+ --slim
+ Selects a mode of operation that uses less memory and will
+ therefore work where virtual memory is very limited or
+ unavailable. Selecting this option will cause raw data to be
+ held in disk files with only indexes in RAM. Not using this
+ option will still use disk files but only for sequential access
+ and the files are memory mapped for random access.
+
+ --sort-ram-size=<size>
+ Specifies the amount of RAM (in MB) to use for sorting the data.
+ If not specified then 64 MB will be used if the '--slim' option
+ is specified or 256 MB otherwise.
+
+ --tmpdir=<dirname>
+ Specifies the name of the directory to store the temporary disk
+ files. If not specified then it defaults to either the value of
+ the --dir option or the current directory.
+
+ --parse-only
+ Parse the input files and store them in a temporary file but
+ don't process the data into a routing database.
+
+ --process-only
+ Don't read in any files but process the existing temporary file
+ into the routing database.
+
+ --max-iterations=<number>
+ The maximum number of iterations to use when generating
+ super-nodes and super-segments. Defaults to 10 which is normally
+ enough.
+
+ --tagging=<filename>
+ The name of the XML file containing the tagging rules (defaults
+ to 'tagging.xml' with '--dirname' and '--prefix' options).
+
+ <filename.osm> ...
+ Specifies the filename(s) to read data from, by default data is
+ read from the standard input.
+
+ Note: In version 1.4 of Routino the --transport, --not-highway and
+ --not-property options have been removed. The same functionality can be
+ achieved by editing the tagging rules file to not output unwwanted
+ data.
+
+ Example usage:
+
+./planetsplitter --dir=data --prefix=gb great_britain.osm
+
+ This will generate the output files 'data/gb-nodes.mem',
+ 'data/gb-segments.mem' and 'data/gb-ways.mem'.
+
+
+router
+------
+
+ This program performs the calculation of the optimum routes using the
+ database generated by the planetsplitter program.
+
+ Usage: router [--help | --help-profile | --help-profile-xml |
+ --help-profile-json | --help-profile-perl ]
+ [--dir=<dirname>] [--prefix=<name>]
+ [--profiles=<filename>] [--translations=<filename>]
+ [--exact-nodes-only]
+ [--quiet]
+ [--output-html]
+ [--output-gpx-track] [--output-gpx-route]
+ [--output-text] [--output-text-all]
+ [--output-none]
+ [--profile=<name>]
+ [--transport=<transport>]
+ [--shortest | --quickest]
+ --lon1=<longitude> --lat1=<latitude>
+ --lon2=<longitude> --lon2=<latitude>
+ [ ... --lon99=<longitude> --lon99=<latitude>]
+ [--highway-<highway>=<preference> ...]
+ [--speed-<highway>=<speed> ...]
+ [--property-<property>=<preference> ...]
+ [--oneway=(0|1)]
+ [--weight=<weight>]
+ [--height=<height>] [--width=<width>] [--length=<length>]
+
+ --help
+ Prints out the help information.
+
+ --help-profile
+ Prints out the selected transport profile (type, speed limits,
+ highway preferences etc.)
+
+ --help-profile-xml
+ Prints out all the loaded profiles as an XML file in the same
+ format that can be loaded in.
+
+ --help-profile-json
+ Prints out all the loaded profiles in JavaScript Object Notation
+ (JSON) format for use in the interactive webpage.
+
+ --help-profile-perl
+ Prints out all the loaded profiles as a Perl object for use in
+ the router CGI.
+
+ --dir=<dirname>
+ Sets the directory name in which to read the local database.
+ Defaults to the current directory.
+
+ --prefix=<name>
+ Sets the filename prefix for the files in the local database.
+ Defaults to no prefix.
+
+ --profiles=<filename>
+ Sets the filename containing the list of profiles in XML format.
+ If the file doesn't exist then dirname, prefix and
+ "profiles.xml" will be combined and used, if that doesn't exist
+ then the command line must contain all relevant profile
+ information.
+
+ --translations=<filename>
+ Sets the filename containing the list of translations in XML
+ format for the output files. If the file doesn't exist then
+ dirname, prefix and "translations.xml" will be combined and
+ used, if that doesn't exist then no file will be read and no
+ language can be selected.
+
+ --exact-nodes-only
+ When processing the specified latitude and longitude points only
+ select the nearest node instead of finding the nearest point
+ within a segment (quicker but less accurate unless the points
+ are already near nodes).
+
+ --quiet
+ Don't generate any screen output while running (useful for
+ running in a script).
+
+ --language=<lang>
+ Select the language specified from the file of translations. If
+ this option is not given and the file exists then the first
+ language in the file will be used. If this option is not given
+ and no file exists the compiled-in default language (English)
+ will be used.
+
+ --output-html
+ --output-gpx-track
+ --output-gpx-route
+ --output-text
+ --output-text-all
+ Generate the selected output file formats (HTML, GPX track file,
+ GPX route file, plain text route and/or plain text with all
+ nodes). If no output is specified then all are generated,
+ specifying any automatically disables those not specified.
+
+ --output-none
+ Do not generate any output or read in any translations files.
+
+ --profile=<name>
+ Specifies the name of the profile to use.
+
+ --transport=<transport>
+ Select the type of transport to use, <transport> can be set to:
+
+ + foot = Foot
+ + horse = Horse
+ + wheelchair = Wheelchair
+ + bicycle = Bicycle
+ + moped = Moped (Small motorbike, limited speed)
+ + motorbike = Motorbike
+ + motorcar = Motorcar
+ + goods = Goods (Small lorry, van)
+ + hgv = HGV (Heavy Goods Vehicle - large lorry)
+ + psv = PSV (Public Service Vehicle - bus, coach)
+
+ Defaults to 'motorcar', this option also selects the default
+ profile information if the '--profile' option is not given and a
+ profile matching the transport name is found.
+
+ --shortest
+ Find the shortest route between the waypoints.
+
+ --quickest
+ Find the quickest route between the waypoints.
+
+ --lon1=<longitude>, --lat1=<latitude>
+ --lon2=<longitude>, --lat2=<latitude>
+ ... --lon99=<longitude>, --lat99=<latitude>
+ The location of the waypoints that make up the start, middle and
+ end points of the route. Up to 99 waypoints can be specified and
+ the route will pass through each of the specified ones in
+ sequence. The algorithm will use the closest node or point
+ within a segment that allows the specified traffic type.
+
+ --highway-<highway>=<preference>
+ Selects the percentage preference for using each particular type
+ of highway. The value of <highway> can be selected from:
+
+ + motorway = Motorway
+ + trunk = Trunk
+ + primary = Primary
+ + secondary = Secondary
+ + tertiary = Tertiary
+ + unclassified = Unclassified
+ + residential = Residential
+ + service = Service
+ + track = Track
+ + cycleway = Cycleway
+ + path = Path
+ + steps = Steps
+
+ Default value depends on the profile selected by the --transport
+ option.
+
+ --speed-<highway>=<speed>
+ Selects the speed limit in km/hour for each type of highway.
+ Default value depends on the profile selected by the --transport
+ option.
+
+ --property-<property>=<preference>
+ Selects the percentage preference for using each particular
+ highway property The value of <property> can be selected from:
+
+ + paved = Paved (suitable for normal wheels)
+ + multilane = Multiple lanes
+ + bridge = Bridge
+ + tunnel = Tunnel
+
+ Default value depends on the profile selected by the --transport
+ option.
+
+ --oneway=[0|1]
+ Selects if the direction of oneway streets are to be obeyed
+ (useful to not obey them when walking). Default value depends on
+ the profile selected by the --transport option.
+
+ --weight=<weight>
+ Specifies the weight of the mode of transport in tonnes; ensures
+ that the weight limit on the highway is not exceeded. Default
+ value depends on the profile selected by the --transport option.
+
+ --height=<height>
+ Specifies the height of the mode of transport in metres; ensures
+ that the height limit on the highway is not exceeded. Default
+ value depends on the profile selected by the --transport option.
+
+ --width=<width>
+ Specifies the width of the mode of transport in metres; ensures
+ that the width limit on the highway is not exceeded. Default
+ value depends on the profile selected by the --transport option.
+
+ --length=<length>
+ Specifies the length of the mode of transport in metres; ensures
+ that the length limit on the highway is not exceeded. Default
+ value depends on the profile selected by the --transport option.
+
+ The meaning of the <preference> parameter in the command line options
+ is slightly different for the highway preferences and the property
+ preferences. For the highway preference consider the choice between two
+ possible highways between the start and finish when looking for the
+ shortest route. If highway A has a preference of 100% and highway B has
+ a preference of 90% then highway A will be chosen even if it is up to
+ 11% longer (100/90 = 111%). For the highway properties each highway
+ either has a particular property or not. If the preference for highways
+ with the property is 60% then the preference for highways without the
+ property is 40%. The overall preference for the highway is the product
+ of the highway preference and the preference for highways with (or
+ without) each property that the highway has (or doesn't have).
+
+ Example usage (motorbike journey, scenic route, not very fast):
+
+ ./router --dir=data --prefix=gb --transport=motorbike --highway-motorway=0 \
+ --highway-trunk=0 --speed-primary=80 --speed-secondary=80 --quickest
+
+ This will use the files 'data/gb-nodes.mem', 'data/gb-segments.mem' and
+ 'data/gb-ways.mem' to find the quickest route by motorbike not using
+ motorways or trunk roads and not exceeding 80 km/hr.
+
+
+filedumper
+----------
+
+ This program is used to extract statistics from the database, extract
+ particular information for visualisation purposes or for dumping the
+ database contents.
+
+ Usage: filedumper [--help]
+ [--dir=<dirname>] [--prefix=<name>]
+ [--statistics]
+ [--visualiser --latmin=<latmin> --latmax=<latmax>
+ --lonmin=<lonmin> --lonmax=<lonmax>
+ --data=<data-type>]
+ [--dump [--node=<node> ...]
+ [--segment=<segment> ...]
+ [--way=<way> ...]]
+ [--dump-osm [--no-super]
+ [--latmin=<latmin> --latmax=<latmax>
+ --lonmin=<lonmin> --lonmax=<lonmax>]]
+
+ --help
+ Prints out the help information.
+
+ --dir=<dirname>
+ Sets the directory name in which to read the local database.
+ Defaults to the current directory.
+
+ --prefix=<name>
+ Sets the filename prefix for the files in the local database.
+
+ --statistics
+ Prints out statistics about the database files.
+
+ --visualiser
+ Selects a data visualiser mode which will output a set of data
+ according to the other parameters below.
+
+ --latmin=<latmin> --latmax=<latmax>
+ The range of latitudes to print the data for.
+
+ --lonmin=<lonmin> --lonmax=<lonmax>
+ The range of longitudes to print the data for.
+
+ --data=<data-type>
+ The type of data to output, <data-type> can be selected
+ from:
+
+ o junctions = segment count at each junction.
+ o super = super-node and super-segments.
+ o oneway = oneway segments.
+ o speed = speed limits.
+ o weight = weight limits.
+ o height = height limits.
+ o width = width limits.
+ o length = length limits.
+
+ --dump
+ Selects a data dumping mode which allows looking at individual
+ items in the databases (specifying 'all' instead of a number
+ dumps all of them).
+
+ --node=<node>
+ Prints the information about the selected node number
+ (internal number, not the node id number in the original
+ source file).
+
+ --segment=<segment>
+ Prints the information about the selected segment number.
+
+ --way=<way>
+ Prints the information about the selected way number
+ (internal number, not the way id number in the original
+ source file).
+
+ --osm-dump
+ Dumps the contents of the database as an OSM format XML file,
+ the whole database will be dumped unless the latitude and
+ longitude ranges are specified.
+
+ --no-super
+ The super segments will not be output.
+
+ --latmin=<latmin> --latmax=<latmax>
+ The range of latitudes to dump the data for.
+
+ --lonmin=<lonmin> --lonmax=<lonmax>
+ The range of longitudes to dump the data for.
+
+tagmodifier
+-----------
+
+ This program is used to run the tag transformation process on an OSM
+ XML file for test purposes.
+
+ Usage: tagmodifier [--help]
+ [--tagging=<filename>]
+ [<filename.osm>]
+
+ --help
+ Prints out the help information.
+
+ --tagging=<filename>
+ The name of the XML file containing the tagging rules (defaults
+ to 'tagging.xml' in the current directory).
+
+ <filename.osm> ...
+ Specifies the filename to read data from, by default data is
+ read from the standard input.
+
+
+--------
+
+Copyright 2008-2010 Andrew M. Bishop.
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+
+<!--
+ Routino documentation - algorithm
+
+ Part of the Routino routing software.
+
+ This file Copyright 2008-2010 Andrew M. Bishop
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+-->
+
+<HEAD>
+<TITLE>Routino : Algorithm</TITLE>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<LINK href="style.css" type="text/css" rel="stylesheet">
+</HEAD>
+
+<BODY>
+
+<!-- Header Start -->
+
+<div class="header" align="center">
+
+<h1>Routino : Algorithm</h1>
+
+<hr>
+</div>
+
+<!-- Header End -->
+
+<!-- Content Start -->
+
+<div class="content">
+
+<h2><a name="H_1_1"></a>Algorithms</h2>
+
+This page describes the development of the algorithm that is used in Routino for
+finding routes.
+
+<h3><a name="H_1_1_1"></a>Simplest Algorithm</h3>
+
+The algorithm to find a route is fundamentally simple: Start at the beginning,
+follow all possible routes and keep going until you reach the end.
+<p>
+While this method does work, it isn't fast. To be able to find a route quickly
+needs a different algorithm, one that can find the correct answer without
+wasting time on routes that lead nowhere.
+
+<h3><a name="H_1_1_2"></a>Improved Algorithm</h3>
+
+The simplest way to do this is to follow all possible segments from the starting
+node to the next nearest node (an intermediate node in the complete journey).
+For each node that is reached store the shortest route from the starting node
+and the length of that route. The list of intermediate nodes needs to be
+maintained in order of shortest overall route on the assumption that there is a
+straight line route from here to the end node.
+<br>
+At each point the intermediate node that has the shortest potential overall
+journey time is processed before any other node. From the first node in the
+list follow all possible segments and place the newly discovered nodes into the
+same list ordered in the same way. This will tend to constrain the list of
+nodes examined to be the ones that are between the start and end nodes. If at
+any point you reach a node that has already been reached by a longer route then
+you can discard that route since the newly discovered route is shorter.
+Conversely if the previously discovered route is shorter then discard the new
+route.
+<br>
+At some point the end node will be reached and then any routes with potential
+lengths longer than this actual route can be immediately discarded. The few
+remaining potential routes must be continued until they are found to be shorter
+or have no possibility of being shorter. The shortest possible route is then
+found.
+<p>
+At all times when looking at a node only those segments that are possible by the
+chosen means of transport are followed. This allows the type of transport to be
+handled easily. When finding the quickest route the same rules apply except
+that criterion for sorting is the shortest potential route (assuming that from
+each node to the end is the fastest possible type of highway).
+<p>
+This method also works, but again it isn't very fast. The problem is that the
+complexity is proportional to the number of nodes or segments in all routes
+examined between the start and end nodes. Maintaining the list of intermediate
+nodes in order is the most complex part.
+
+<h3><a name="H_1_1_3"></a>Final Algorithm</h3>
+
+The final algorithm that is implemented in the router is basically the one above
+but with an important difference. Instead of finding a long route among a data
+set of 8,000,000 nodes (number of highway nodes in UK at beginning of 2010) it
+finds one long route in a data set of 1,000,000 nodes and a few hundred very
+short routes in the full data set. Since the time taken to find a route is
+proportional to the number of nodes the main route takes 1/10th of the time and
+the very short routes take almost no time at all.
+<p>
+The solution to making the algorithm fast is therefore to discard most of the
+nodes and only keep the interesting ones. In this case a node is deemed to be
+interesting if it is the junction of two segments with different properties. In
+the algorithm these are classed as <em>super-nodes</em>. Starting at each
+super-node a <em>super-segment</em> is generated that finishes on another
+super-node and contains the <em>shortest</em> path along segments with identical
+properties (and these properties are inherited by the super-segment). The point
+of choosing the shortest route is that since all segments considered have
+identical properties they will be treated identically when properties are taken
+into account. This decision making process can be repeated until the only the
+most important and interesting nodes remain.
+<p>
+<img alt="Original data" src="example0.png"><br>
+<img alt="Iteration 1" src="example1.png"><br>
+<img alt="Iteration 2" src="example2.png"><br>
+<p>
+To find a route between a start and finish point now comprises the following
+steps (assuming a shortest route is required):
+<ol>
+ <li>Find all shortest routes from the start point along normal segments and
+ stopping when super-nodes are reached.
+ <li>Find all shortest routes from the end point backwards along normal
+ segments and stopping when super-nodes are reached.
+ <li>Find the shortest route along super-segments from the set of super-nodes
+ in step 1 to the set of super-nodes in step 2 (taking into account the lengths
+ found in steps 1 and 2 between the start/finish super-nodes and the ultimate
+ start/finish point).
+ <li>For each super-segment in step 3 find the shortest route between the two
+ end-point super-nodes.
+</ol>
+This multi-step process is considerably quicker than using all nodes but gives a
+result that still contains the full list of nodes that are visited. There are
+some special cases though, for example very short routes that do not pass
+through any super-nodes, or routes that start or finish on a super-node. In
+these cases one or more of the steps listed can be removed or simplified.
+
+<h3><a name="H_1_1_4"></a>Routing Preferences</h3>
+
+One of the important features of Routino is the ability to select a route that
+is optimum for a set of criteria such as preferences for each type of highway,
+speed limits and other restrictions and highway properties.
+<p>
+All of these features are handled by assigning a score to each segment while
+calculating the route and trying to minimise the score rather than simply
+minimising the length.
+<dl>
+ <dt>Segment length
+ <dd>When calculating the shortest route the length of the segment is the
+ starting point for the score.
+ <dt>Speed preference
+ <dd>When calculating the quickest route the time taken calculated from the
+ length of the segment and the lower of the highway's own speed limit and the
+ user's speed preference for the type of highway is the starting point for the
+ score.
+ <dt>Oneway restriction
+ <dd>If a highway has the oneway property in the opposite direction to the
+ desired travel and the user's preference is to obey oneway restrictions then
+ the segment is ignored.
+ <dt>Weight, height, width & length limits
+ <dd>If a highway has one of these limits and its value is less than the user's
+ specified requirement then the segment is ignored.
+ <dt>Highway preference
+ <dd>The highway preference specified by the user is a percentage, these are
+ scaled so that the most preferred highway type has a weighted preference of
+ 1.0 (0% always has a weighted preference of 0.0). The calculated score for a
+ segment is divided by this weighted preference.
+ <dt>Highway properties
+ <dd>The other highway properties are specified by the user as a percentage and
+ each highway either has that property or not. The user's property preference
+ is scaled into the range 0.0 (for 0%) to 2.0 (for 100%) to give a weighted
+ preference, a second "non-property" weighted preference is calcuated in the
+ same way after subtracting the user's preference from 100%. If a segment has
+ this property then the calculated score is divided by the weighted preference,
+ if the segment does not have this property then it is divided by the
+ non-property weighted preference.
+</dl>
+
+<h3><a name="H_1_1_5"></a>Implementation</h3>
+
+The hardest part of implementing this router is the data organisation. The
+arrangement of the data to minimise the number of operations required to follow
+a route from one node to another is much harder than designing the algorithm
+itself.
+<p>
+The final implementation uses a separate table for nodes, segments and ways.
+Each table individually is implemented as a C-language data structure that is
+written to disk by a program which parses the OpenStreetMap XML data file. In
+the router these data structures are memory mapped so that the operating system
+handles the problems of loading the needed data blocks from disk.
+<p>
+Each node contains a latitude and longitude and they are sorted geographically
+so that converting a latitude and longitude coordinate to a node is fast as well
+as looking up the coordinate of a node. The node also contains the location in
+the array of segments for the first segment that uses that node.
+<br>
+Each segment contains the location of the two nodes as well as the way that the
+segment came from. The location of the next segment that uses one of the two
+nodes is also stored; the next segment for the other node is the following one
+in the array. The length of the segment is also pre-computed and stored.
+<br>
+Each way has a name, a highway type, a list of allowed types of traffic, a speed
+limit, any weight, height, width or length restrictions and the highway
+properties.
+<p>
+The super-nodes are mixed in with the nodes and the super-segments are mixed in
+with the segments. For the nodes they are the same as the normal nodes, so just
+a flag is needed to indicate that they are super. The super-segments are in
+addition to the normal segments so they increase the database size (by about
+10%) and are also marked with a flag.
+
+<h3><a name="H_1_1_6"></a>Practicalities</h3>
+
+At the time of writing (April 2010) the OpenStreetMap data for Great Britain
+(taken from
+<a class="ext" href="http://download.geofabrik.de/osm/europe/" title="GeoFabrik Mirror of OpenStreetMap Data">GeoFabrik</a>
+) contains:
+<ul>
+ <li>14,675,098 nodes
+ <ul>
+ <li>8,767,521 are highway nodes
+ <li>1,120,297 are super-nodes
+ </ul>
+ <li>1,876,822 ways
+ <ul>
+ <li>1,412,898 are highways
+ <ul>
+ <li>9,316,328 highway segments
+ <li>1,641,009 are super-segments
+ </ul>
+ </ul>
+ <li>60,572 relations
+</ul>
+
+The database files when generated are 41.5 MB for nodes, 121.6 MB for segments
+and 12.6 MB for ways and are stored uncompressed. By having at least 200 MB or
+RAM available the routing can be performed with no disk accesses (once the data
+has been read once).
+
+
+</div>
+
+<!-- Content End -->
+
+<!-- Footer Start -->
+
+<div class="footer" align="center">
+<hr>
+
+<address>
+© Andrew M. Bishop = <amb "at" gedanken.demon.co.uk>
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+
+<!--
+ Routino documentation - configuration
+
+ Part of the Routino routing software.
+
+ This file Copyright 2008-2010 Andrew M. Bishop
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+-->
+
+<HEAD>
+<TITLE>Routino : Configuration</TITLE>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<LINK href="style.css" type="text/css" rel="stylesheet">
+</HEAD>
+
+<BODY>
+
+<!-- Header Start -->
+
+<div class="header" align="center">
+
+<h1>Routino : Configuration</h1>
+
+<hr>
+</div>
+
+<!-- Header End -->
+
+<!-- Content Start -->
+
+<div class="content">
+
+<h2><a name="H_1_1"></a>XML Configuration Files</h2>
+
+New in version 1.4 of Routino are the use of configuration files to allow more
+information to be provided to the programs at run-time. The configuration files
+that are used are:
+<ul>
+ <li>Tagging transformation rules for the <em>planetsplitter</em> program.
+ <li>Routing profiles for the <em>router</em> program.
+ <li>Output translations for the <em>router</em> program.
+</ul>
+
+In keeping with the nature of the input and output files the configuration files
+are also XML files. Each of the files uses a custom defined XML schema and an
+XSD file is provided for each of them.
+
+<h3><a name="H_1_1_1" title="Tagging rules"></a>Tag Transformation Rules</h3>
+
+The default name of the tagging transformation rules XML configuration file
+is <em>tagging.xml</em> in the same directory as the generated database files.
+Other filenames can be specified on the command line using
+the <tt>--tagging</tt> option. When processing the input it is possible to have
+a different set of tagging rules for each file; for example different rules for
+different countries.
+
+<p>
+
+The tagging rules allow modifying the highway tags in the source file so that
+the routing can be performed on a simpler set of tags. This removes the special
+case tagging rules from the source code into the configuration file where they
+can be easily modified. Part of the provided tagging.xml file showing the rules
+for motorway_link and motorway highway types.
+
+<pre class="boxed">
+<?xml version="1.0" encoding="utf-8"?>
+<routino-tagging>
+
+ <way>
+
+ <if k="highway" v="motorway_link">
+ <set v="motorway"/>
+ </if>
+
+ <if k="highway" v="motorway">
+ <output k="highway"/>
+
+ <output k="motorbike" v="yes"/>
+ <output k="motorcar" v="yes"/>
+ <output k="goods" v="yes"/>
+ <output k="hgv" v="yes"/>
+ <output k="psv" v="yes"/>
+
+ <output k="paved" v="yes"/>
+ <output k="multilane" v="yes"/>
+ <output k="oneway" v="yes"/>
+ </if>
+...
+ <way>
+
+</routino-tagging>
+</pre>
+
+The rules all have the same format; an <em>if</em> element for matching the
+input and some <em>set</em> or <em>output</em> elements to either change the
+input tags or create an output tag. The <em>k</em> and <em>v</em> attributes
+have the same meaning as the attributes with the same names in the OSM XML file
+- the tag key and tag value.
+
+<p>
+
+An <em>if</em> rule that has both <em>k</em> and <em>v</em> specified is only
+applied if a tag exists in the input that matches both. An <em>if</em> rule
+that has only the <em>k</em> attribute is applied if a tag with that key exists
+and an <em>if</em> rule that has only the <em>v</em> attribute is applied to all
+tags with that value.
+
+<p>
+
+For the <em>set</em> and <em>output</em> elements the tag that is created in the
+input or output tag set uses the <em>k</em> and <em>v</em> attributes specified.
+If one or both are not specified then the original ones are used.
+
+
+<h3><a name="H_1_1_2" title="Profiles"></a>Routing Profiles</h3>
+
+The default name of the routing profiles XML configuration file
+is <em>profiles.xml</em> in the same directory as the database files. Other
+filenames can be specified on the command line using the <tt>--tagging</tt>
+option.
+
+<p>
+
+The purpose of this configuration file is to allow easy modification of the
+routing parameters so that they do not all need to be specified on the command
+line. In versions of Routino before version 1.4 the default routing parameters
+(preferred highways, preferred speeds etc) were contained in the source code,
+now they are in a configuration file. When calculating a route
+the <tt>--profile</tt> option selects the named profile from the configuration
+file.
+
+<p>
+
+Part of the provided profiles.xml file showing the parameters for transport on
+foot is shown below:
+
+<pre class="boxed">
+<?xml version="1.0" encoding="UTF-8" ?>
+<routino-profiles>
+
+ <profile name="foot" transport="foot">
+ <speeds>
+...
+ <speed highway="cycleway" kph="4" />
+ <speed highway="path" kph="4" />
+ <speed highway="steps" kph="4" />
+ </speeds>
+ <preferences>
+...
+ <preference highway="cycleway" percent="95" />
+ <preference highway="path" percent="100" />
+ <preference highway="steps" percent="80" />
+ </preferences>
+ <properties>
+ <property type="paved" percent="50" />
+ <property type="multilane" percent="25" />
+ <property type="bridge" percent="50" />
+ <property type="tunnel" percent="50" />
+ </properties>
+ <restrictions>
+ <oneway obey="0" />
+ <weight limit="0.0" />
+ <height limit="0.0" />
+ <width limit="0.0" />
+ <length limit="0.0" />
+ </restrictions>
+ </profile>
+ <profile name="horse" transport="horse">
+...
+ </profile>
+...
+</routino-profiles>
+</pre>
+
+
+<h3><a name="H_1_1_3" title="Translations"></a>Output Translations</h3>
+
+The default name of the output translations XML configuration file
+is <em>translations.xml</em> in the same directory as the database files. Other
+filenames can be specified on the command line using the <tt>--translations</tt>
+option.
+
+<p>
+
+The generated HTML and GPX output files (described in the next section) are
+created using the fragments of text that are defined in this file. Additional
+languages can be added to the file and are selected using
+the <tt>--language</tt> option to the router. If no language is specified the
+first one in the file is used.
+
+<p>
+
+Part of the provided translations.xml file showing some of the English language
+(en) translations is shown below:
+
+<pre class="boxed">
+<?xml version="1.0" encoding="utf-8"?>
+<routino-translations>
+
+ <language lang="en">
+...
+ <turn direction="-4" string="Very sharp left" />
+ <turn direction="-3" string="Sharp left" />
+ <turn direction="-2" string="Left" />
+...
+ <heading direction="-4" string="South" />
+ <heading direction="-3" string="South-West" />
+ <heading direction="-2" string="West" />
+...
+ <route type="shortest" string="Shortest" />
+ <route type="quickest" string="Quickest" />
+ <output-html>
+...
+ </output-html>
+ <output-gpx>
+...
+ </output-gpx>
+ </language>
+</routino-translations>
+</pre>
+
+</div>
+
+<!-- Content End -->
+
+<!-- Footer Start -->
+
+<div class="footer" align="center">
+<hr>
+
+<address>
+© Andrew M. Bishop = <amb "at" gedanken.demon.co.uk>
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+
+<!--
+ Routino documentation - data
+
+ Part of the Routino routing software.
+
+ This file Copyright 2008-2010 Andrew M. Bishop
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+-->
+
+<HEAD>
+<TITLE>Routino : Data</TITLE>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<LINK href="style.css" type="text/css" rel="stylesheet">
+</HEAD>
+
+<BODY>
+
+<!-- Header Start -->
+
+<div class="header" align="center">
+
+<h1>Routino : Data</h1>
+
+<hr>
+</div>
+
+<!-- Header End -->
+
+<!-- Content Start -->
+
+<div class="content">
+
+<h2><a name="H_1_1"></a>Data</h2>
+
+A router relies on data to be able to find a route.
+
+<h3><a name="H_1_1_1"></a>OpenStreetMap Data</h3>
+
+The data that is collected by the OpenStreetMap project consists of
+<em>nodes</em>, <em>ways</em> and <em>relations</em>.
+<dl>
+ <dt>Node
+ <dd>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).
+ <dt>Way
+ <dd>A way is a collection of nodes that when joined together define something
+ (for example a road, a ralway, a boundary, a building, a lake etc). The
+ ways also have attributes that define them (speed limits, type of road and
+ restrictions for example).
+ <dt>Relation
+ <dd>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).
+</dl>
+
+The
+<a class="ext" title="OpenStreetMap Wiki" href="http://wiki.openstreetmap.org/wiki/Main_Page">OpenStreetMap Wiki</a>
+explains the data much better than I can.
+
+<h3><a name="H_1_1_2"></a>Router Data</h3>
+
+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.
+<dl>
+ <dt>Location of highways (nodes)
+ <dd>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 the router.
+ <dt>Location of highways (ways)
+ <dd>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 <em>segments</em> which are
+ individual parts of a way connected by two nodes.
+ <dt>Properties of highways (tags)
+ <dd>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, min height, max weight etc).
+ <dt>Connections between highways
+ <dd>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.
+</dl>
+
+The information that is extracted from the OpenStreetMap data is stored in an
+optimised way that allows the routing to be performed quickly.
+
+<h3><a name="H_1_1_3" title="Data Tags"></a>Interpreting Data Tags</h3>
+
+The <em>tags</em> 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).
+<p>
+
+There are no well defined rules in OpenStreetMap about tagging, but there is
+guidance on the
+<a class="ext" title="Map Features" href="http://wiki.openstreetmap.org/index.php/Map_Features">OpenStreetMap Wiki "Map_Features"</a>
+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.
+<p>
+
+The <a title="Tagging" href="tagging.html">tagging rules</a> 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.
+
+
+<h3><a name="H_1_1_4" title="Problems With Data"></a>Problems With OpenStreetMap Data</h3>
+
+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.
+<p>
+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.
+<p>
+A lot of these problems can be found using the interactive data visualiser that
+uses the same Routino rouing database.
+
+
+</div>
+
+<!-- Content End -->
+
+<!-- Footer Start -->
+
+<div class="footer" align="center">
+<hr>
+
+<address>
+© Andrew M. Bishop = <amb "at" gedanken.demon.co.uk>
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+
+<!--
+ Routino documentation - index
+
+ Part of the Routino routing software.
+
+ This file Copyright 2008-2010 Andrew M. Bishop
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+-->
+
+<HEAD>
+<TITLE>Routino : Documentation</TITLE>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<LINK href="style.css" type="text/css" rel="stylesheet">
+</HEAD>
+
+<BODY>
+
+<!-- Header Start -->
+
+<div class="header" align="center">
+
+<h1>Routino : Documentation</h1>
+
+<hr>
+</div>
+
+<!-- Header End -->
+
+<!-- Content Start -->
+
+<div class="content">
+
+
+<h2><a name="H_1_1"></a>Data</h2>
+
+A good router relies on good data and the
+<a class="ext" title="OpenStreetMap" href="http://www.openstreetmap.org/">OpenStreetMap</a>
+data is a good source. There are however a number of things that need to be
+considered about
+<a href="data.html" title="Data considerations">the data used</a>.
+
+
+<h2><a name="H_1_2"></a>Tagging</h2>
+
+In addition to the raw data the way that are tags are used is also important.
+With Routino the
+<a title="Tagging" href="tagging.html">tagging rules</a>
+are contained in a configuration file and can easily be customised to change the
+interpretation of each tag.
+
+
+<h2><a name="H_1_3"></a>Program Usage</h2>
+
+There are four programs that make up this software, two create the routing
+database and use the information in it and the other two perform additional functions.
+<a href="usage.html" title="Program Usage">Full instructions</a>
+for using the four programs are provided.
+
+
+<h2><a name="H_1_4"></a>Configuration Files</h2>
+
+When the programs are run they read in one or more
+<a href="configuration.html" title="Configuration Files">configuration files</a>.
+These files contain information about the routing preferences (types of highways,
+prefered speeds etc), tagging rules and translation information for the outputs.
+
+
+<h2><a name="H_1_5"></a>Output Files</h2>
+
+The final result of running the router is one or more
+<a href="output.html" title="Output Files">output files</a>
+that contain the calculated route.
+
+
+<h2><a name="H_1_6"></a>Algorithm</h2>
+
+The <a title="Algorithm" href="algorithm.html">algorithm</a> that is used by
+Routino takes the OpenStreetMap data and creates a local database of the
+important information for rapid routing.
+
+
+<h2><a name="H_1_7"></a>Installation</h2>
+
+The Routino source code comes with a set of files that can be used to create
+a working server very easily. The full information about
+<a href="installation.html" title="Installation">installation</a>
+describes how to compile the programs and install them.
+
+
+</div>
+
+<!-- Content End -->
+
+<!-- Footer Start -->
+
+<div class="footer" align="center">
+<hr>
+
+<address>
+© Andrew M. Bishop = <amb "at" gedanken.demon.co.uk>
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+
+<!--
+ Routino documentation - installation
+
+ Part of the Routino routing software.
+
+ This file Copyright 2008-2010 Andrew M. Bishop
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+-->
+
+<HEAD>
+<TITLE>Routino : Installation</TITLE>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<LINK href="style.css" type="text/css" rel="stylesheet">
+</HEAD>
+
+<BODY>
+
+<!-- Header Start -->
+
+<div class="header" align="center">
+
+<h1>Routino : Installation</h1>
+
+<hr>
+</div>
+
+<!-- Header End -->
+
+<!-- Content Start -->
+
+<div class="content">
+
+
+<h2><a name="H_1_1"></a>Compilation</h2>
+
+This program has been written to run on Linux, no cross-platform compatibility
+has been specifically included but on the other hand nothing platform specific
+has been knowingly included either.
+
+<p>
+
+Any information on improving the compilation process on anything other than
+32-bit x86 Linux is welcome.
+
+<p>
+
+No external libraries are required and the programs are written in standard C
+language.
+
+<p>
+
+To compile the programs just type 'make'.
+
+
+<h2><a name="H_1_2"></a>Installation</h2>
+
+After compilation the executable files are copied into the directory
+<tt>web/bin</tt> and the default XML configuration files are copied into the
+directory <tt>web/data</tt>. This is in preparation for using the supplied
+example web pages but is also a useful location to copy the files from for
+normal use.
+
+<p>
+
+The executable files are called <tt>planetsplitter</tt>, <tt>router</tt> and
+<tt>filedumper</tt> (also <tt>tagmodifier</tt> for debugging tag modifications).
+They can be copied to any location and need no special installation environment.
+
+<p>
+
+The default configuration files are called <tt>profiles.xml</tt>,
+<tt>tagging.xml</tt> and <tt>translations.xml</tt>. The names of the
+configuration files can be specified on the command line but by default are also
+looked for in the directory that contains the routing database.
+
+
+<h2><a name="H_1_3"></a>Example Web Page</h2>
+
+The directory <tt>web</tt> contains a set of files that can be used to create a
+working set of web pages with interfaces to the routing algorithm.
+
+<p>
+
+The files in the <tt>web</tt> directory will require copying to a location that
+is accessible by a web server. After copying the files some of them need to be
+edited; search through the files for lines that contain the words "EDIT THIS"
+and make appropriate edits. The files that need editing are <tt>paths.pl</tt>
+(to set the directory paths) and <tt>router.js</tt> and <tt>visualiser.js</tt>
+to limit the range of the visible map (latitude, longitude and zoom).
+
+
+<h3><a name="H_1_3_1"></a>Configuration of web files</h3>
+
+The assumption in this description is that the whole of the directory called
+<tt>web</tt> is copied into a directory that is accessible by an Apache web
+server.
+
+<p>
+
+<em>This is not a secure configuration but an easy one to configure.</em>
+<br>
+<em>Only the directory <tt>www</tt> should be accessible by the web server.</em>
+<br>
+<em>Do not use this configuration unmodified in a public web server.</em>
+
+<p>
+
+The directory structure is as follows:
+
+<pre>
+ web/
+ |
+ + /bin/ <- The Routino executable files (when compiled).
+ |
+ + /data/ <- The Routino database and default configuration
+ | files.
+ |
+ + /results/ <- An empty directory to store the results.
+ |
+ + /www/ <- The files that must be available to the web
+ | server are below this level.
+ |
+ + /openlayers/ <- A directory to hold the OpenLayers scripts.
+ |
+ + /routino/ <- The main HTML, Javascript, CSS and CGI files.
+ |
+ + /documentation/ <- The HTML version of the Routino documentation.
+</pre>
+
+The directory <tt>bin</tt> will be filled by running the compilation process.
+For a secure installation the <tt>bin</tt> directory should be outside of the
+web server, the file <tt>www/routino/paths.pl</tt> contains the path to
+the <tt>bin</tt> directory.
+
+<p>
+
+The directory <tt>data</tt> must contain the Routino database and is also the
+default location for the configuration files. The routing database is created
+by downloading the OSM files for the region of interest and running the
+planetsplitter program. There is a script in the directory that will download
+the OSM files and create the required database. The script should be edited to
+set the names of the files to be downloaded. For a secure installation
+the <tt>data</tt> directory should be outside of the web server, the
+file <tt>www/routino/paths.pl</tt> contains the path to the <tt>data</tt>
+directory.
+
+<p>
+
+The directory <tt>results</tt> is a temporary directory that it used to hold the
+GPX and text files generated by the Routino router. The directory must be
+writable by the web server process since it is the CGI scripts that are run by
+the web server that writes the results here. For a secure installation
+the <tt>results</tt> directory should be outside of the web server, the file
+<tt>www/routino/paths.pl</tt> contains the path to the <tt>results</tt> directory.
+
+<p>
+
+The directory <tt>www</tt> and its sub-directories are the only ones that need
+to be within the web server accessible directory.
+
+<p>
+
+The directory <tt>www/openlayers</tt> must be filled with the openlayers
+Javascript library that can be downloaded from http://www.openlayers.org/.
+(This version of Routino has been tested with OpenLayers library version 2.9.1).
+The files must be installed so that the file <tt>www/openlayers/OpenLayers.js</tt>
+and the directories <tt>www/openlayers/img/</tt>, <tt>www/openlayers/theme/</tt>
+all exist. There is a script in the directory that will automatically download
+the files, create an optimised "OpenLayers.js" and copy the files to the required
+locations.
+
+<p>
+
+The directory <tt>www/routino</tt> contains the main HTML, Javascript and CSS
+files as well as the CGI scripts that perform the server-side routing functions.
+The description below lists all of the files that contain editable information.
+
+<dl>
+ <dt>paths.pl
+ <dd>This contains the names of the directories that contain the executable
+ files, router database and temporary results.
+ <dt>router.pl
+ <dd>This file contains the filename prefix for the routing database files
+ (only needed if planetsplitter is run with the --prefix option).
+ <dt>router.js
+ <dd>The parameters in this file control the boundary of the visible map
+ (defaults to UK), the minimum and maximum zoom levels (defaults to between
+ 4 and 15 inclusive) and the source of map tiles (defaults to the main
+ OpenStreetMap tile server).
+ <dt>visualiser.js
+ <dd>The same parameters as in router.js are in this file.
+</dl>
+
+<p>
+
+The directory <tt>www/routino/documentation</tt> contains the HTML version of
+the Routino documentation.
+
+
+<h3><a name="H_1_3_2"></a>Configuration of web server</h3>
+
+The file <tt>www/routino/.htaccess</tt> contains all of the Apache configuration
+options that are required to get the example web pages running. The only
+problem is that because of the way that the <tt>AllowOverride</tt> option works
+one of the configuration options has been commented out. This must be enabled
+in the main Apache server configuration file.
+
+
+</div>
+
+<!-- Content End -->
+
+<!-- Footer Start -->
+
+<div class="footer" align="center">
+<hr>
+
+<address>
+© Andrew M. Bishop = <amb "at" gedanken.demon.co.uk>
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+
+<!--
+ Routino documentation - output
+
+ Part of the Routino routing software.
+
+ This file Copyright 2008-2010 Andrew M. Bishop
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+-->
+
+<HEAD>
+<TITLE>Routino : Output</TITLE>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<LINK href="style.css" type="text/css" rel="stylesheet">
+</HEAD>
+
+<BODY>
+
+<!-- Header Start -->
+
+<div class="header" align="center">
+
+<h1>Routino : Output</h1>
+
+<hr>
+</div>
+
+<!-- Header End -->
+
+<!-- Content Start -->
+
+<div class="content">
+
+<h2><a name="H_1_1"></a>Router Output</h2>
+
+There are three different formats of output from the router, HTML,
+<a class="ext" title="GPX format" href="http://www.topografix.com/gpx.asp">GPX (GPS eXchange) XML format</a>
+and plain text with a total of five possible output files:
+<ul>
+ <li>HTML route instructions for each interesting junction.
+ <li>GPX track file containing every node.
+ <li>GPX route file with waypoints at interesting junctions.
+ <li>Plain text description with the interesting junctions.
+ <li>Plain text file with every node.
+</ul>
+
+The "interesting junctions" referred to above are junctions where the route
+changes to a different type of highway, more than two highways of the same type
+meet, or where the route meets but does not take a more major highway. When the
+route follows a major road this definition eliminates all junctions with minor
+roads.
+
+<p>
+
+The output files are written to the current directory and are named depending on
+the selection of shortest or quickest route. For the shortest route the file
+names are "shortest.html", "shortest-track.gpx", "shortest-route.gpx",
+"shortest.txt" and "shortest-all.txt", for the quickest route the names are
+"quickest.html", "quickest-track.gpx", "quickest-route.gpx", "quickest.txt" and
+"quickest-all.txt".
+
+<p>
+
+The HTML file and GPX files are written out according to the selected language
+using the translations contained in the translations.xml configuration file.
+
+<!-- For reference the examples were produced from the following URL:
+ http://www.gedanken.org.uk/mapping/routino/customrouter.cgi?transport=motorcar;lon1=-0.12790;lat1=51.52468;lon2=-0.10365;lat2=51.47824 -->
+
+<h3><a name="H_1_1_1" title="HTML file"></a>HTML Route Instructions</h3>
+
+The HTML route instructions file contains one line for each of the interesting
+junctions in the route and one line for the highway that connects them.
+
+<p>
+
+An example HTML file output is below (some parts are missing, for example the
+style definitions):
+
+<pre class="boxed">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+<!-- Creator : Routino - http://www.routino.org/ -->
+<!-- Source : Based on OpenStreetMap data from http://www.openstreetmap.org/ -->
+<!-- License : http://creativecommons.org/licenses/by-sa/2.0/ -->
+<HEAD>
+<TITLE>Shortest Route</TITLE>
+...
+</HEAD>
+<BODY>
+<H1>Shortest Route</H1>
+<table>
+<tr class='c'><td class='l'><td class='r'>51.524677 -0.127896
+<tr class='n'><td class='l'>Start:<td class='r'>At <span class='w'>Waypoint</span>, head <span class='b'>South-East</span>
+
+<tr class='s'><td class='l'>Follow:<td class='r'><span class='h'>Russell Square</span> for <span class='d'>0.391 km, 0.5 min</span> [<span class='j'>0.4 km, 0 minutes</span>]
+...
+<tr class='t'><td class='l'>Total:<td class='r'><span class='j'>6.3 km, 5 minutes</span>
+<tr><td class='l'>Stop:<td class='r'><span class='w'>Waypoint</span>
+</table>
+</BODY>
+</HTML>
+</pre>
+
+The coordinates are included in the file but are not visible because of the
+style definitions.
+
+<h3><a name="H_1_1_2" title="GPX track file"></a>GPX Track File</h3>
+
+The GPX track file contains a track with all of the individual nodes that the
+route passes through.
+
+<p>
+
+An example GPX track file output is below:
+
+<pre class="boxed">
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="Routino" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
+<desc>Creator : Routino - http://www.routino.org/</desc>
+<copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/">
+<license>http://creativecommons.org/licenses/by-sa/2.0/</license>
+</copyright>
+</metadata>
+<trk>
+<name>Shortest route</name>
+<desc>Shortest route between 'start' and 'finish' waypoints</desc>
+<trkpt lat="51.524677" lon="-0.127896"/>
+<trkpt lat="51.523830" lon="-0.126993"/>
+...
+<trkpt lat="51.478353" lon="-0.103561"/>
+<trkpt lat="51.478244" lon="-0.103652"/>
+</trkseg>
+</trk>
+</gpx>
+</pre>
+
+
+<h3><a name="H_1_1_3" title="GPX route file"></a>GPX Route File</h3>
+
+The GPX route file contains a route (ordered set of waypoints) with all of the
+interesting junctions that the route passes through.
+
+<p>
+
+An example GPX route file output is below:
+
+<pre class="boxed">
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="Routino" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
+<desc>Creator : Routino - http://www.routino.org/</desc>
+<copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/">
+<license>http://creativecommons.org/licenses/by-sa/2.0/</license>
+</copyright>
+</metadata>
+<rte>
+<name>Shortest route</name>
+<desc>Shortest route between 'start' and 'finish' waypoints</desc>
+<rtept lat="51.524677" lon="-0.127896"><name>START</name>
+<desc>South-East on 'Russell Square' for 0.391 km, 0.5 min</desc></rtept>
+<rtept lat="51.521815" lon="-0.124577"><name>TRIP001</name>
+<desc>South-East on 'Russell Square' for 0.055 km, 0.1 min</desc></rtept>
+...
+<rtept lat="51.478244" lon="-0.103652"><name>FINISH</name>
+<desc>Total Journey 6.3 km, 5 minutes</desc></rtept>
+</rte>
+</gpx>
+</pre>
+
+
+<h3><a name="H_1_1_4" title="Text file"></a>Text File</h3>
+
+The text file format contains one entry for all of the interesting junctions in
+the route and is intended to be easy to interpret.
+
+<p>
+
+An example text file output is below:
+
+<pre class="boxed">
+# Creator : Routino - http://www.routino.org/
+# Source : Based on OpenStreetMap data from http://www.openstreetmap.org/
+# License : http://creativecommons.org/licenses/by-sa/2.0/
+#
+#Latitude Longitude Section Section Total Total Point Turn Bearing Highway
+# Distance Duration Distance Duration Type
+ 51.524677 -0.127896 0.000 km 0.0 min 0.0 km 0 min Waypt +3
+ 51.521815 -0.124577 0.391 km 0.5 min 0.4 km 0 min Junct +0 +3 Russell Square
+...
+ 51.478353 -0.103561 0.598 km 0.4 min 6.2 km 5 min Junct +2 -3 Camberwell New Road (A202)
+ 51.478244 -0.103652 0.013 km 0.0 min 6.3 km 5 min Waypt Vassall Road
+</pre>
+
+<p>
+
+The text file output contains a header (indicated by the lines starting with
+'#') and then one line for each junction. Each line contains the information
+for the route up to that point and the direction to go next.
+
+For each of the lines the individual fields contain the following:
+
+<table>
+ <tr>
+ <th>Item
+ <th class=left>Description
+ <tr>
+ <td>Latitude
+ <td>Location of the point (degrees)
+ <tr>
+ <td>Longitude
+ <td>Location of the point (degrees)
+ <tr>
+ <td>Section Distance
+ <td>The distance travelled on the section of the journey that ends at this
+ point (defined on this line).
+ <tr>
+ <td>Section Duration
+ <td>The duration of travel on the section of the journey that ends at this
+ point (defined on this line).
+ <tr>
+ <td>Total Distance
+ <td>The total distance travelled up to this point.
+ <tr>
+ <td>Total Duration
+ <td>The total duration of travel up to this point.
+ <tr>
+ <td>Point Type
+ <td>The type of point; either a waypoint <em>Waypt</em> or
+ junction <em>Junct</em>.
+ <tr>
+ <td>Turn
+ <td>The direction to turn at this point (missing for the first point since
+ the journey has not started yet and the last point because it has
+ finished). This can take one of nine values between -4 and +4 defined by:
+ 0 = <em>Straight</em>, +2 = <em>Right</em>, -2 = <em>Left</em> and +/-4
+ = <em>Reverse</em>.
+ <tr>
+ <td>Bearing
+ <td>The direction to head at this point (missing for the last point since
+ the journey has finished). This can take one of nine values between -4
+ and +4 defined by: 0 = <em>North</em>, +2 = <em>East</em>, -2
+ = <em>West</em> and +/-4 = <em>South</em>.
+ <tr>
+ <td>Highway
+ <td>The name (or description) of the highway to follow (missing on the first
+ line).
+</table>
+
+<p>
+
+The individual items are separated by tabs but some of the items contain spaces
+as well.
+
+
+<h3><a name="H_1_1_5" title="All nodes text file"></a>All Nodes Text File</h3>
+
+The all nodes text file format contains one entry for each of the nodes on the
+route.
+
+<p>
+
+An example all nodes text file output is below:
+
+<pre class="boxed">
+# Creator : Routino - http://www.routino.org/
+# Source : Based on OpenStreetMap data from http://www.openstreetmap.org/
+# License : http://creativecommons.org/licenses/by-sa/2.0/
+#
+#Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway
+# Dist Durat'n Dist Durat'n
+ 51.524677 -0.127896 7485978* Waypt 0.000 0.00 0.00 0.0
+ 51.523830 -0.126993 7485047* Junct 0.113 0.14 0.11 0.1 96 146 Woburn Place
+...
+ 51.478353 -0.103561 7576939* Junct 0.104 0.07 6.25 5.0 96 126 Camberwell New Road (A202)
+ 51.478244 -0.103652 7581605 Waypt 0.013 0.01 6.26 5.0 64 207 Vassall Road
+</pre>
+
+<p>
+
+The all nodes text file output is similar to the text file output except that a
+line is printed for each of the nodes rather than just the interesting junctions.
+
+For each of the lines the individual fields contain the following:
+
+<table>
+ <tr>
+ <th>Item
+ <th class=left>Description
+ <tr>
+ <td>Latitude
+ <td>Location of the point in degrees.
+ <tr>
+ <td>Longitude
+ <td>Location of the point in degrees.
+ <tr>
+ <td>Node
+ <td>The internal node number and an indicator "*" if the node is a super-node.
+ <tr>
+ <td>Type
+ <td>The type of point; a waypoint <em>Waypt</em>, junction <em>Junct</em>,
+ change of highway <em>Change</em> or intermediate node <em>Inter</em>.
+ <tr>
+ <td>Segment Distance
+ <td>The distance travelled on the segment defined on this line.
+ <tr>
+ <td>Segment Duration
+ <td>The duration of travel on the segment defined on this line.
+ <tr>
+ <td>Total Distance
+ <td>The total distance travelled up to this point.
+ <tr>
+ <td>Total Duration
+ <td>The total duration of travel up to this point.
+ <tr>
+ <td>Speed
+ <td>The speed of travel on the segment defined on this line (missing on the
+ first line).
+ <tr>
+ <td>Bearing
+ <td>The direction that the segment defined on this line travels in degrees
+ (missing on the first line).
+ <tr>
+ <td>Highway
+ <td>The name (or description) of the highway segment (missing on the first
+ line).
+</table>
+
+
+</div>
+
+<!-- Content End -->
+
+<!-- Footer Start -->
+
+<div class="footer" align="center">
+<hr>
+
+<address>
+© Andrew M. Bishop = <amb "at" gedanken.demon.co.uk>
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
--- /dev/null
+/*
+// Routino web page style sheet.
+//
+// Part of the Routino routing software.
+//
+// This file Copyright 2008-2010 Andrew M. Bishop
+//
+// 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.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+/*----------------------------------*/
+/* Body HTML formatting */
+/*----------------------------------*/
+
+BODY
+{
+ /* fonts and text styles */
+
+ font-family: sans-serif;
+ font-size: medium;
+
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ margin: 0;
+}
+
+A.ext
+{
+ /* fonts and text styles */
+
+ text-decoration: underline;
+}
+
+PRE
+{
+ /* fonts and text styles */
+
+ font-family: monospace;
+}
+
+PRE.boxed
+{
+ /* margins, borders, padding and sizes */
+
+ padding: 0.5em;
+
+ border: solid;
+ border-width: thin;
+}
+
+
+/*-----------------------------------*/
+/* Header HTML formatting */
+/*-----------------------------------*/
+
+DIV.header
+{
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+
+ border-width: 0;
+ border-bottom: solid;
+ border-bottom-width: thin;
+
+ margin: 0;
+
+ /* floats */
+
+ clear: left;
+}
+
+DIV.header HR /* Horizontal rule, only visible without CSS */
+{
+ display: none;
+}
+
+DIV.header H1
+{
+ /* fonts and text styles */
+
+ font-size: xx-large;
+
+ font-weight: bold;
+
+ text-decoration: underline;
+
+ /* margins, borders, padding and sizes */
+
+ padding: 0.25em;
+
+ border: 0;
+
+ margin: 0;
+}
+
+
+/*-----------------------------------*/
+/* Footer HTML formatting */
+/*-----------------------------------*/
+
+DIV.footer
+{
+ /* fonts and text styles */
+
+ font-size: small;
+
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+
+ border-width: 0;
+ border-top: solid;
+ border-top-width: thin;
+
+ margin: 0;
+
+ /* floats */
+
+ clear: left;
+}
+
+DIV.footer HR /* Horizontal rule, only visible without CSS */
+{
+ display: none;
+}
+
+
+/*-----------------------------------*/
+/* Content HTML formatting */
+/*-----------------------------------*/
+
+DIV.content
+{
+ /* margins, borders, padding and sizes */
+
+ padding: 0.5em;
+
+ border-width: 0;
+}
+
+DIV.content H1
+{
+ /* fonts and text styles */
+
+ font-size: xx-large;
+ font-weight: bold;
+
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ margin-top: 1em;
+ margin-bottom: 0.25em;
+}
+
+DIV.content H2
+{
+ /* fonts and text styles */
+
+ font-size: x-large;
+ font-weight: bold;
+
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ margin-top: 0.75em;
+ margin-bottom: 0.25em;
+}
+
+DIV.content H3
+{
+ /* fonts and text styles */
+
+ font-size: large;
+ font-weight: bold;
+
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ margin-top: 0.75em;
+ margin-bottom: 0.25em;
+}
+
+DIV.content H4
+{
+ /* fonts and text styles */
+
+ font-size: medium;
+ font-weight: bold;
+
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ margin-top: 0.5em;
+ margin-bottom: 0.125em;
+}
+
+DIV.content OL, DIV.content UL, DIV.content DIR, DIV.content MENU, DIV.content DL
+{
+ /* margins, borders, padding and sizes */
+
+ padding-top: 0;
+ padding-bottom: 0;
+
+ margin-top: 0.25em;
+ margin-bottom: 0.25em;
+}
+
+DIV.content UL UL, DIV.content UL OL, DIV.content UL DL, DIV.content OL UL, DIV.content OL OL, DIV.content OL DL, DIV.content DL UL, DIV.content DL OL, DIV.content DL DL
+{
+ /* margins, borders, padding and sizes */
+
+ padding-top: 0;
+ padding-bottom: 0;
+
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+DIV.content FORM
+{
+ /* margins, borders, padding and sizes */
+
+ padding: 0.5em;
+
+ margin: 0.5em;
+}
+
+DIV.content INPUT
+{
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ border: 1px solid;
+
+ margin: 1px;
+}
+
+DIV.content BUTTON
+{
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ border: 1px solid;
+
+ margin: 1px;
+}
+
+DIV.content INPUT.left
+{
+ /* text alignment */
+
+ text-align: left;
+}
+
+DIV.content INPUT.center
+{
+ /* text alignment */
+
+ text-align: center;
+}
+
+DIV.content INPUT.right
+{
+ /* text alignment */
+
+ text-align: right;
+}
+
+DIV.content TABLE
+{
+ /* margins, borders, padding and sizes */
+
+ padding: 0;
+
+ border: 2px solid;
+
+ margin: 0;
+ margin-left: auto;
+ margin-right: auto;
+
+ border-collapse: collapse;
+}
+
+DIV.content TABLE.noborder
+{
+ /* margins, borders, padding and sizes */
+
+ margin-left: auto;
+ margin-right: auto;
+
+ border: 0;
+}
+
+DIV.content TABLE.noborder-left
+{
+ /* margins, borders, padding and sizes */
+
+ margin-left: 0;
+ margin-right: auto;
+
+ border: 0;
+}
+
+DIV.content CAPTION
+{
+ /* position */
+
+ caption-side: bottom;
+
+ /* text alignment */
+
+ text-align: center;
+
+ /* fonts and text styles */
+
+ font-weight: bold;
+}
+
+DIV.content TD, DIV.content TH
+{
+ /* margins, borders, padding and sizes */
+
+ border: 1px solid;
+}
+
+DIV.content TABLE.noborder TD, DIV.content TABLE.noborder TH
+{
+ /* margins, borders, padding and sizes */
+
+ border: 0;
+}
+
+DIV.content TABLE.noborder-left TD, DIV.content TABLE.noborder-left TH
+{
+ /* margins, borders, padding and sizes */
+
+ border: 0;
+}
+
+DIV.content TD.left, DIV.content TH.left, DIV.content TR.left
+{
+ /* text alignment */
+
+ text-align: left;
+}
+
+DIV.content TD.center, DIV.content TH.center, DIV.content TR.center
+{
+ /* text alignment */
+
+ text-align: center;
+}
+
+DIV.content TD.right, DIV.content TH.right, DIV.content TR.right
+{
+ /* text alignment */
+
+ text-align: right;
+}
+
+DIV.content IMG
+{
+ /* margins, borders, padding and sizes */
+
+ border: 0px;
+}
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+
+<!--
+ Routino documentation - tagging
+
+ Part of the Routino routing software.
+
+ This file Copyright 2008-2010 Andrew M. Bishop
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see http://www.gnu.org/licenses/.
+-->
+
+<HEAD>
+<TITLE>Routino : Tagging Rules</TITLE>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<LINK href="style.css" type="text/css" rel="stylesheet">
+</HEAD>
+
+<BODY>
+
+<!-- Header Start -->
+
+<div class="header" align="center">
+
+<h1>Routino : Tagging Rules</h1>
+
+<hr>
+</div>
+
+<!-- Header End -->
+
+<!-- Content Start -->
+
+<div class="content">
+
+<h2><a name="H_1_1"></a>Tags And Attributes</h2>
+
+The different tags and attributes in the
+<a class="ext" title="OpenStreetMap" href="http://www.openstreetmap.org/">OSM</a>
+format XML that are used by Routino are described below.
+
+<p>
+
+An important change for version 1.4 of Routino is that the tags in the input
+file are first processed according to a set of rules defined in a configuration
+file. This means that the information presented here is in two parts; firstly
+the tags that are recognised by Routino after pre-processing and secondly the
+transformations in the default configuration file.
+
+
+<h2><a name="H_1_2" title="After Processing"></a>Tags Recognised After Processing</h2>
+
+This section describes the tags that are recognised by Routino after the tag
+transformations have been applied. This is therefore a much reduced set of tags
+compared to the original OSM data and also includes tags which are specific to
+Routino.
+
+<p>
+
+In all cases of tag processing values of <em>true</em>, <em>yes</em>, <em>1</em>
+are recognised as being affirmative and any other value is ignored.
+
+
+<h3><a name="H_1_2_1" title="Nodes"></a>Node Tags And Attributes</h3>
+
+None of the node tags are used but the node attributes <em>id</em>, <em>latitude</em>
+and <em>longitude</em> of the node. The id atribute is required to associate the
+node with the ways and the position attributes are required to locate the node.
+
+
+<h3><a name="H_1_2_2" title="Ways"></a>Way Tags And Attributes</h3>
+
+The tags from the ways in the data are the ones that provide most of the
+information for routing. The <em>id</em> attribute is used only so that the
+many segments associated with a way can be share a set of tags taken from the
+way.
+
+
+<h4><a name="H_1_2_2_1" title="highway"></a>The highway Tag</h4>
+
+The most important tag that is used from a way is the <em>highway</em> tag.
+This defines the type of highway that the way represents. Any way that does not
+have a highway tag is discarded.
+
+<p>
+
+There are more highway types defined than are used by the router. The subset
+that the router uses are:
+
+<ul>
+ <li>motorway
+ <li>trunk
+ <li>primary
+ <li>secondary
+ <li>tertiary
+ <li>unclassified
+ <li>residential
+ <li>service
+ <li>track
+ <li>cycleway
+ <li>path (1)
+ <li>steps (2)
+</ul>
+
+<p>
+
+<i>
+ Note 1: This changed in version 1.3 of Routino - the bridleway and footway
+ types were included within the path highway type.
+ <br>
+ Note 2: This changed in version 1.3 of Routino - the steps type was separated
+ from the footway type.
+</i>
+
+
+<h4><a name="H_1_2_2_2" title="transport tags"></a>Transport Specific Tags</h4>
+
+One tag is recognised for each of the different modes of transport: <em>foot</em>,
+<em>horse</em>, <em>bicycle</em>, <em>wheelchair</em>, <em>moped</em>,
+<em>motorbike</em>, <em>motorcar</em>, <em>goods</em>, <em>hgv</em>
+and <em>psv</em>. These indicate whether the specific type of transport is
+allowed on the highway or not.
+
+
+<h4><a name="H_1_2_2_3" title="name"></a>The name Tag</h4>
+
+The <em>name</em> tag is used to provide the label for the highway when printing
+the results.
+
+
+<h4><a name="H_1_2_2_4" title="ref"></a>The ref Tag</h4>
+
+The <em>ref</em> tag is used to provide the label for the highway when printing
+the results.
+
+
+<h4><a name="H_1_2_2_5" title="junction"></a>The junction Tag</h4>
+
+The <em>junction</em> tag is used to check if a highway is (part of) a
+roundabout. This tag is used for information to label the highway if no other
+name is provided.
+
+
+<h4><a name="H_1_2_2_6" title="multilane"></a>The multilane Tag</h4>
+
+The <em>multilane</em> tag is used to identify whether a highway has multiple
+lanes for traffic and this sets one of the highway properties. There is not
+normally a <em>multilane</em> tag but one needs to be added by the tag
+processing transformations. Values of <em>true</em>, <em>yes</em>, <em>1</em>
+are recognised.
+
+
+<h4><a name="H_1_2_2_7" title="paved"></a>The paved Tag</h4>
+
+The <em>paved</em> tag is used to identify whether a highway is paved or not,
+this is one of the available highway properties. A <em>paved</em> tag may exist
+in the original data but normally the <em>surface</em> tag needs to be
+transformed into the paved tag.
+
+
+<h4><a name="H_1_2_2_8" title="bridge"></a>The bridge Tag</h4>
+
+The <em>bridge</em> tag is used to identify whether a highway is a bridge and
+therefore set one of the available properties.
+
+
+<h4><a name="H_1_2_2_9" title="tunnel"></a>The tunnel Tag</h4>
+
+The <em>tunnel</em> tag is used to identify whether a highway is a tunnel and
+therefore set one of the available properties.
+
+
+<h4><a name="H_1_2_2_10" title="oneway"></a>The oneway Tag</h4>
+
+The <em>oneway</em> tag is used to specify that traffic is only allowed to
+travel in one direction.
+
+
+<h4><a name="H_1_2_2_11" title="maxspeed"></a>The maxspeed Tag</h4>
+
+The <em>maxspeed</em> tag is used to specify the maximum speed limit on the
+highway; this is always measured in km/hr in OpenStreetMap data. If the tag
+value contains "mph" then it is assumed to be a value in those units and
+converted to km/hr.
+
+
+<h4><a name="H_1_2_2_12" title="maxweight"></a>The maxweight Tag</h4>
+
+The <em>maxweight</em> tag is used to specify the maximum weight of any traffic
+on the way. In other words this must be set to the heaviest weight allowed on
+the way (for example a bridge) in tonnes. If the tag value contains "kg" then
+it is assumed that the value is in these units and converted to tonnes.
+
+
+<h4><a name="H_1_2_2_13" title="maxheight"></a>The maxheight Tag</h4>
+
+The <em>maxheight</em> tag is used to specify the maximum height of any traffic
+on the way. In other words this must be set to the lowest height of anything
+above the way (like a bridge) in metres. If the tag value contains a
+measurement in feet or feet and inches then attempts are made to convert this to
+metres.
+
+
+<h4><a name="H_1_2_2_14" title="maxwidth"></a>The maxwidth Tag</h4>
+
+The <em>maxwidth</em> tag is used to specify the maximum width of any traffic on
+the way. This must be set to the minimum width of the contraints at the wayside
+in metres. If the tag value contains a measurement in feet or feet and inches
+then attempts are made to convert this to metres.
+
+
+<h4><a name="H_1_2_2_15" title="maxlength"></a>The maxlength Tag</h4>
+
+The <em>maxlength</em> tag is used to specify the maximum length of any traffic
+on the way (usually from a traffic sign) in metres. If the tag value contains a
+measurement in feet or feet and inches then attempts are made to convert this to
+metres.
+
+
+<h3><a name="H_1_2_3" title="Relations"></a>Relation Tags And Attributes</h3>
+
+Currently no relation tags or attributes are used.
+
+
+<h2><a name="H_1_3" title="Tag Transformations"></a>Tag Transformations</h2>
+
+This section describes the set of tag transformations that are contained in the
+default configuration file. The configuration file tagging rules are applied in
+sequence and this section of the document is arranged in the same order.
+
+
+<h3><a name="H_1_3_1" title="Nodes"></a>Node Tag Transformations</h3>
+
+No transformations are applicable since no node tags are recognised.
+
+
+<h3><a name="H_1_3_2" title="Ways"></a>Way Tag Transformations</h3>
+
+
+<h4><a name="H_1_3_2_1" title="Highway Defaults"></a>Highway Defaults</h4>
+
+The first part of the tag transformations is to decide on defaults for each type
+of highway. This uses the highway tag in the OSM file and maps it into one of
+the highway tags that are recognised by Routino, defining the default allowed
+transport types and adding a number of properties.
+
+<p>
+
+The first part of the transformation is to convert the highway tag into one that
+is recognised by Routino.
+
+<p>
+
+<table>
+ <caption>Mapping of equivalent highway types</caption>
+ <tr>
+ <th class="left">Original tag
+ <th class="left">Transformed tag
+ <tr>
+ <td class="left">bridleway
+ <td class="left">path
+ <tr>
+ <td class="left">byway
+ <td class="left">track
+ <tr>
+ <td class="left">footway
+ <td class="left">path
+ <tr>
+ <td class="left">living_street
+ <td class="left">residential
+ <tr>
+ <td class="left">minor
+ <td class="left">unclassified
+ <tr>
+ <td class="left">pedestrian
+ <td class="left">path
+ <tr>
+ <td class="left">road
+ <td class="left">unclassified
+ <tr>
+ <td class="left">services
+ <td class="left">service
+ <tr>
+ <td class="left">unsurfaced
+ <td class="left">track
+ <tr>
+ <td class="left">unpaved
+ <td class="left">track
+ <tr>
+ <td class="left">walkway
+ <td class="left">path
+</table>
+
+<p>
+
+The type of highway also determines the defaults for the types of transport
+allowed on the highway. The default assumptions are as shown in the table
+below.
+
+<p>
+
+<table>
+ <caption>Transport types on different highway types</caption>
+ <tr>
+ <th class="left">Highway
+ <th class="center">foot
+ <th class="center">horse
+ <th class="center">bicycle
+ <th class="center">wheelchair
+ <th class="center">moped
+ <th class="center">motorbike
+ <th class="center">motorcar
+ <th class="center">goods
+ <th class="center">hgv
+ <th class="center">psv
+ <tr>
+ <td class="left">motorway
+ <td class="center">no
+ <td class="center">no
+ <td class="center">no
+ <td class="center">no
+ <td class="center">no
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <tr>
+ <td class="left">trunk
+ <td class="center">no
+ <td class="center">no
+ <td class="center">no
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes
+ <tr>
+ <td class="left">primary
+ <td class="center">yes
+ <td class="center">yes
+ <td class="center">yes