Imported Upstream version 1.4.1
authorThibaut GRIDEL <tgridel@free.fr>
Mon, 1 Nov 2010 14:50:45 +0000 (15:50 +0100)
committerThibaut GRIDEL <tgridel@free.fr>
Mon, 1 Nov 2010 14:50:45 +0000 (15:50 +0100)
536 files changed:
ChangeLog [new file with mode: 0644]
INSTALL.txt [new symlink]
Makefile [new file with mode: 0644]
NEWS.txt [new symlink]
README.txt [new symlink]
agpl-3.0.txt [new file with mode: 0644]
doc/ALGORITHM.txt [new file with mode: 0644]
doc/CONFIGURATION.txt [new file with mode: 0644]
doc/DATA.txt [new file with mode: 0644]
doc/INSTALL.txt [new file with mode: 0644]
doc/Makefile [new file with mode: 0644]
doc/NEWS.txt [new file with mode: 0644]
doc/OUTPUT.txt [new file with mode: 0644]
doc/README.txt [new file with mode: 0644]
doc/TAGGING.txt [new file with mode: 0644]
doc/USAGE.txt [new file with mode: 0644]
doc/html/algorithm.html [new file with mode: 0644]
doc/html/configuration.html [new file with mode: 0644]
doc/html/data.html [new file with mode: 0644]
doc/html/example0.png [new file with mode: 0644]
doc/html/example1.png [new file with mode: 0644]
doc/html/example2.png [new file with mode: 0644]
doc/html/index.html [new file with mode: 0644]
doc/html/installation.html [new file with mode: 0644]
doc/html/output.html [new file with mode: 0644]
doc/html/style.css [new file with mode: 0644]
doc/html/tagging.html [new file with mode: 0644]
doc/html/usage.html [new file with mode: 0644]
src/Makefile [new file with mode: 0644]
src/filedumper.c [new file with mode: 0644]
src/files.c [new file with mode: 0644]
src/functions.h [new file with mode: 0644]
src/functionsx.h [new file with mode: 0644]
src/nodes.c [new file with mode: 0644]
src/nodes.h [new file with mode: 0644]
src/nodesx.c [new file with mode: 0644]
src/nodesx.h [new file with mode: 0644]
src/optimiser.c [new file with mode: 0644]
src/osmparser.c [new file with mode: 0644]
src/output.c [new file with mode: 0644]
src/planetsplitter.c [new file with mode: 0644]
src/profiles.c [new file with mode: 0644]
src/profiles.h [new file with mode: 0644]
src/queue.c [new file with mode: 0644]
src/results.c [new file with mode: 0644]
src/results.h [new file with mode: 0644]
src/router.c [new file with mode: 0644]
src/segments.c [new file with mode: 0644]
src/segments.h [new file with mode: 0644]
src/segmentsx.c [new file with mode: 0644]
src/segmentsx.h [new file with mode: 0644]
src/sorting.c [new file with mode: 0644]
src/superx.c [new file with mode: 0644]
src/superx.h [new file with mode: 0644]
src/tagging.c [new file with mode: 0644]
src/tagging.h [new file with mode: 0644]
src/tagmodifier.c [new file with mode: 0644]
src/translations.c [new file with mode: 0644]
src/translations.h [new file with mode: 0644]
src/types.c [new file with mode: 0644]
src/types.h [new file with mode: 0644]
src/typesx.h [new file with mode: 0644]
src/visualiser.c [new file with mode: 0644]
src/visualiser.h [new file with mode: 0644]
src/ways.c [new file with mode: 0644]
src/ways.h [new file with mode: 0644]
src/waysx.c [new file with mode: 0644]
src/waysx.h [new file with mode: 0644]
src/xml/Makefile [new file with mode: 0644]
src/xml/test/bad-attr-character-ref.xml [new file with mode: 0644]
src/xml/test/bad-attr-entity-ref.xml [new file with mode: 0644]
src/xml/test/bad-cdata-start.xml [new file with mode: 0644]
src/xml/test/bad-comment-ends-triple-dash.xml [new file with mode: 0644]
src/xml/test/bad-double-quote-attr-amp.xml [new file with mode: 0644]
src/xml/test/bad-double-quote-attr-left-angle.xml [new file with mode: 0644]
src/xml/test/bad-double-quote-attr-right-angle.xml [new file with mode: 0644]
src/xml/test/bad-early-end-of-file.xml [new file with mode: 0644]
src/xml/test/bad-end-tag-space-at-begin1.xml [new file with mode: 0644]
src/xml/test/bad-end-tag-space-at-begin2.xml [new file with mode: 0644]
src/xml/test/bad-end-tag-space-at-end.xml [new file with mode: 0644]
src/xml/test/bad-end-tag-with-attr.xml [new file with mode: 0644]
src/xml/test/bad-single-quote-attr-amp.xml [new file with mode: 0644]
src/xml/test/bad-single-quote-attr-left-angle.xml [new file with mode: 0644]
src/xml/test/bad-single-quote-attr-right-angle.xml [new file with mode: 0644]
src/xml/test/bad-start-tag-space-at-begin.xml [new file with mode: 0644]
src/xml/test/bad-tag-attr-no-quotes.xml [new file with mode: 0644]
src/xml/test/bad-tag-attr-space-after-equal.xml [new file with mode: 0644]
src/xml/test/bad-tag-attr-space-before-equal.xml [new file with mode: 0644]
src/xml/test/bad-tag-level-nesting.xml [new file with mode: 0644]
src/xml/test/bad-unbalanced-tag-start-end.xml [new file with mode: 0644]
src/xml/test/bad-unexpected-attribute-name.xml [new file with mode: 0644]
src/xml/test/bad-unexpected-end-tag.xml [new file with mode: 0644]
src/xml/test/bad-unexpected-left-angle.xml [new file with mode: 0644]
src/xml/test/bad-unexpected-right-angle.xml [new file with mode: 0644]
src/xml/test/bad-xml-header-at-begin.xml [new file with mode: 0644]
src/xml/test/bad-xml-header-at-end.xml [new file with mode: 0644]
src/xml/test/bad-xml-header-not-first.xml [new file with mode: 0644]
src/xml/test/good.xml [new file with mode: 0644]
src/xml/test/test.xsd [new file with mode: 0644]
src/xml/xsd-to-xmlparser.c [new file with mode: 0644]
src/xmlparse.h [new file with mode: 0644]
src/xmlparse.l [new file with mode: 0644]
web/INSTALL.txt [new symlink]
web/data/create.sh [new file with mode: 0755]
web/www/openlayers/install.sh [new file with mode: 0755]
web/www/openlayers/routino.cfg [new file with mode: 0644]
web/www/routino/.htaccess [new file with mode: 0644]
web/www/routino/customrouter.cgi [new file with mode: 0755]
web/www/routino/customvisualiser.cgi [new file with mode: 0755]
web/www/routino/icons/ball-0.png [new file with mode: 0644]
web/www/routino/icons/ball-1.png [new file with mode: 0644]
web/www/routino/icons/ball-2.png [new file with mode: 0644]
web/www/routino/icons/ball-3.png [new file with mode: 0644]
web/www/routino/icons/ball-4.png [new file with mode: 0644]
web/www/routino/icons/ball-5.png [new file with mode: 0644]
web/www/routino/icons/ball-6.png [new file with mode: 0644]
web/www/routino/icons/ball-7.png [new file with mode: 0644]
web/www/routino/icons/ball-8.png [new file with mode: 0644]
web/www/routino/icons/ball-9.png [new file with mode: 0644]
web/www/routino/icons/create-icons.pl [new file with mode: 0755]
web/www/routino/icons/home.png [new file with mode: 0644]
web/www/routino/icons/limit-0.0.png [new file with mode: 0644]
web/www/routino/icons/limit-0.png [new file with mode: 0644]
web/www/routino/icons/limit-1.0.png [new file with mode: 0644]
web/www/routino/icons/limit-1.1.png [new file with mode: 0644]
web/www/routino/icons/limit-1.2.png [new file with mode: 0644]
web/www/routino/icons/limit-1.3.png [new file with mode: 0644]
web/www/routino/icons/limit-1.4.png [new file with mode: 0644]
web/www/routino/icons/limit-1.5.png [new file with mode: 0644]
web/www/routino/icons/limit-1.6.png [new file with mode: 0644]
web/www/routino/icons/limit-1.7.png [new file with mode: 0644]
web/www/routino/icons/limit-1.8.png [new file with mode: 0644]
web/www/routino/icons/limit-1.9.png [new file with mode: 0644]
web/www/routino/icons/limit-1.png [new file with mode: 0644]
web/www/routino/icons/limit-10.0.png [new file with mode: 0644]
web/www/routino/icons/limit-10.1.png [new file with mode: 0644]
web/www/routino/icons/limit-10.2.png [new file with mode: 0644]
web/www/routino/icons/limit-10.3.png [new file with mode: 0644]
web/www/routino/icons/limit-10.4.png [new file with mode: 0644]
web/www/routino/icons/limit-10.5.png [new file with mode: 0644]
web/www/routino/icons/limit-10.6.png [new file with mode: 0644]
web/www/routino/icons/limit-10.7.png [new file with mode: 0644]
web/www/routino/icons/limit-10.8.png [new file with mode: 0644]
web/www/routino/icons/limit-10.9.png [new file with mode: 0644]
web/www/routino/icons/limit-10.png [new file with mode: 0644]
web/www/routino/icons/limit-100.png [new file with mode: 0644]
web/www/routino/icons/limit-101.png [new file with mode: 0644]
web/www/routino/icons/limit-102.png [new file with mode: 0644]
web/www/routino/icons/limit-103.png [new file with mode: 0644]
web/www/routino/icons/limit-104.png [new file with mode: 0644]
web/www/routino/icons/limit-105.png [new file with mode: 0644]
web/www/routino/icons/limit-106.png [new file with mode: 0644]
web/www/routino/icons/limit-107.png [new file with mode: 0644]
web/www/routino/icons/limit-108.png [new file with mode: 0644]
web/www/routino/icons/limit-109.png [new file with mode: 0644]
web/www/routino/icons/limit-11.0.png [new file with mode: 0644]
web/www/routino/icons/limit-11.1.png [new file with mode: 0644]
web/www/routino/icons/limit-11.2.png [new file with mode: 0644]
web/www/routino/icons/limit-11.3.png [new file with mode: 0644]
web/www/routino/icons/limit-11.4.png [new file with mode: 0644]
web/www/routino/icons/limit-11.5.png [new file with mode: 0644]
web/www/routino/icons/limit-11.6.png [new file with mode: 0644]
web/www/routino/icons/limit-11.7.png [new file with mode: 0644]
web/www/routino/icons/limit-11.8.png [new file with mode: 0644]
web/www/routino/icons/limit-11.9.png [new file with mode: 0644]
web/www/routino/icons/limit-11.png [new file with mode: 0644]
web/www/routino/icons/limit-110.png [new file with mode: 0644]
web/www/routino/icons/limit-111.png [new file with mode: 0644]
web/www/routino/icons/limit-112.png [new file with mode: 0644]
web/www/routino/icons/limit-113.png [new file with mode: 0644]
web/www/routino/icons/limit-114.png [new file with mode: 0644]
web/www/routino/icons/limit-115.png [new file with mode: 0644]
web/www/routino/icons/limit-116.png [new file with mode: 0644]
web/www/routino/icons/limit-117.png [new file with mode: 0644]
web/www/routino/icons/limit-118.png [new file with mode: 0644]
web/www/routino/icons/limit-119.png [new file with mode: 0644]
web/www/routino/icons/limit-12.0.png [new file with mode: 0644]
web/www/routino/icons/limit-12.1.png [new file with mode: 0644]
web/www/routino/icons/limit-12.2.png [new file with mode: 0644]
web/www/routino/icons/limit-12.3.png [new file with mode: 0644]
web/www/routino/icons/limit-12.4.png [new file with mode: 0644]
web/www/routino/icons/limit-12.5.png [new file with mode: 0644]
web/www/routino/icons/limit-12.6.png [new file with mode: 0644]
web/www/routino/icons/limit-12.7.png [new file with mode: 0644]
web/www/routino/icons/limit-12.8.png [new file with mode: 0644]
web/www/routino/icons/limit-12.9.png [new file with mode: 0644]
web/www/routino/icons/limit-12.png [new file with mode: 0644]
web/www/routino/icons/limit-120.png [new file with mode: 0644]
web/www/routino/icons/limit-121.png [new file with mode: 0644]
web/www/routino/icons/limit-122.png [new file with mode: 0644]
web/www/routino/icons/limit-123.png [new file with mode: 0644]
web/www/routino/icons/limit-124.png [new file with mode: 0644]
web/www/routino/icons/limit-125.png [new file with mode: 0644]
web/www/routino/icons/limit-126.png [new file with mode: 0644]
web/www/routino/icons/limit-127.png [new file with mode: 0644]
web/www/routino/icons/limit-128.png [new file with mode: 0644]
web/www/routino/icons/limit-129.png [new file with mode: 0644]
web/www/routino/icons/limit-13.0.png [new file with mode: 0644]
web/www/routino/icons/limit-13.1.png [new file with mode: 0644]
web/www/routino/icons/limit-13.2.png [new file with mode: 0644]
web/www/routino/icons/limit-13.3.png [new file with mode: 0644]
web/www/routino/icons/limit-13.4.png [new file with mode: 0644]
web/www/routino/icons/limit-13.5.png [new file with mode: 0644]
web/www/routino/icons/limit-13.6.png [new file with mode: 0644]
web/www/routino/icons/limit-13.7.png [new file with mode: 0644]
web/www/routino/icons/limit-13.8.png [new file with mode: 0644]
web/www/routino/icons/limit-13.9.png [new file with mode: 0644]
web/www/routino/icons/limit-13.png [new file with mode: 0644]
web/www/routino/icons/limit-130.png [new file with mode: 0644]
web/www/routino/icons/limit-131.png [new file with mode: 0644]
web/www/routino/icons/limit-132.png [new file with mode: 0644]
web/www/routino/icons/limit-133.png [new file with mode: 0644]
web/www/routino/icons/limit-134.png [new file with mode: 0644]
web/www/routino/icons/limit-135.png [new file with mode: 0644]
web/www/routino/icons/limit-136.png [new file with mode: 0644]
web/www/routino/icons/limit-137.png [new file with mode: 0644]
web/www/routino/icons/limit-138.png [new file with mode: 0644]
web/www/routino/icons/limit-139.png [new file with mode: 0644]
web/www/routino/icons/limit-14.0.png [new file with mode: 0644]
web/www/routino/icons/limit-14.1.png [new file with mode: 0644]
web/www/routino/icons/limit-14.2.png [new file with mode: 0644]
web/www/routino/icons/limit-14.3.png [new file with mode: 0644]
web/www/routino/icons/limit-14.4.png [new file with mode: 0644]
web/www/routino/icons/limit-14.5.png [new file with mode: 0644]
web/www/routino/icons/limit-14.6.png [new file with mode: 0644]
web/www/routino/icons/limit-14.7.png [new file with mode: 0644]
web/www/routino/icons/limit-14.8.png [new file with mode: 0644]
web/www/routino/icons/limit-14.9.png [new file with mode: 0644]
web/www/routino/icons/limit-14.png [new file with mode: 0644]
web/www/routino/icons/limit-140.png [new file with mode: 0644]
web/www/routino/icons/limit-141.png [new file with mode: 0644]
web/www/routino/icons/limit-142.png [new file with mode: 0644]
web/www/routino/icons/limit-143.png [new file with mode: 0644]
web/www/routino/icons/limit-144.png [new file with mode: 0644]
web/www/routino/icons/limit-145.png [new file with mode: 0644]
web/www/routino/icons/limit-146.png [new file with mode: 0644]
web/www/routino/icons/limit-147.png [new file with mode: 0644]
web/www/routino/icons/limit-148.png [new file with mode: 0644]
web/www/routino/icons/limit-149.png [new file with mode: 0644]
web/www/routino/icons/limit-15.0.png [new file with mode: 0644]
web/www/routino/icons/limit-15.1.png [new file with mode: 0644]
web/www/routino/icons/limit-15.2.png [new file with mode: 0644]
web/www/routino/icons/limit-15.3.png [new file with mode: 0644]
web/www/routino/icons/limit-15.4.png [new file with mode: 0644]
web/www/routino/icons/limit-15.5.png [new file with mode: 0644]
web/www/routino/icons/limit-15.6.png [new file with mode: 0644]
web/www/routino/icons/limit-15.7.png [new file with mode: 0644]
web/www/routino/icons/limit-15.8.png [new file with mode: 0644]
web/www/routino/icons/limit-15.9.png [new file with mode: 0644]
web/www/routino/icons/limit-15.png [new file with mode: 0644]
web/www/routino/icons/limit-150.png [new file with mode: 0644]
web/www/routino/icons/limit-151.png [new file with mode: 0644]
web/www/routino/icons/limit-152.png [new file with mode: 0644]
web/www/routino/icons/limit-153.png [new file with mode: 0644]
web/www/routino/icons/limit-154.png [new file with mode: 0644]
web/www/routino/icons/limit-155.png [new file with mode: 0644]
web/www/routino/icons/limit-156.png [new file with mode: 0644]
web/www/routino/icons/limit-157.png [new file with mode: 0644]
web/www/routino/icons/limit-158.png [new file with mode: 0644]
web/www/routino/icons/limit-159.png [new file with mode: 0644]
web/www/routino/icons/limit-16.0.png [new file with mode: 0644]
web/www/routino/icons/limit-16.1.png [new file with mode: 0644]
web/www/routino/icons/limit-16.2.png [new file with mode: 0644]
web/www/routino/icons/limit-16.3.png [new file with mode: 0644]
web/www/routino/icons/limit-16.4.png [new file with mode: 0644]
web/www/routino/icons/limit-16.5.png [new file with mode: 0644]
web/www/routino/icons/limit-16.6.png [new file with mode: 0644]
web/www/routino/icons/limit-16.7.png [new file with mode: 0644]
web/www/routino/icons/limit-16.8.png [new file with mode: 0644]
web/www/routino/icons/limit-16.9.png [new file with mode: 0644]
web/www/routino/icons/limit-16.png [new file with mode: 0644]
web/www/routino/icons/limit-160.png [new file with mode: 0644]
web/www/routino/icons/limit-17.0.png [new file with mode: 0644]
web/www/routino/icons/limit-17.1.png [new file with mode: 0644]
web/www/routino/icons/limit-17.2.png [new file with mode: 0644]
web/www/routino/icons/limit-17.3.png [new file with mode: 0644]
web/www/routino/icons/limit-17.4.png [new file with mode: 0644]
web/www/routino/icons/limit-17.5.png [new file with mode: 0644]
web/www/routino/icons/limit-17.6.png [new file with mode: 0644]
web/www/routino/icons/limit-17.7.png [new file with mode: 0644]
web/www/routino/icons/limit-17.8.png [new file with mode: 0644]
web/www/routino/icons/limit-17.9.png [new file with mode: 0644]
web/www/routino/icons/limit-17.png [new file with mode: 0644]
web/www/routino/icons/limit-18.0.png [new file with mode: 0644]
web/www/routino/icons/limit-18.1.png [new file with mode: 0644]
web/www/routino/icons/limit-18.2.png [new file with mode: 0644]
web/www/routino/icons/limit-18.3.png [new file with mode: 0644]
web/www/routino/icons/limit-18.4.png [new file with mode: 0644]
web/www/routino/icons/limit-18.5.png [new file with mode: 0644]
web/www/routino/icons/limit-18.6.png [new file with mode: 0644]
web/www/routino/icons/limit-18.7.png [new file with mode: 0644]
web/www/routino/icons/limit-18.8.png [new file with mode: 0644]
web/www/routino/icons/limit-18.9.png [new file with mode: 0644]
web/www/routino/icons/limit-18.png [new file with mode: 0644]
web/www/routino/icons/limit-19.0.png [new file with mode: 0644]
web/www/routino/icons/limit-19.1.png [new file with mode: 0644]
web/www/routino/icons/limit-19.2.png [new file with mode: 0644]
web/www/routino/icons/limit-19.3.png [new file with mode: 0644]
web/www/routino/icons/limit-19.4.png [new file with mode: 0644]
web/www/routino/icons/limit-19.5.png [new file with mode: 0644]
web/www/routino/icons/limit-19.6.png [new file with mode: 0644]
web/www/routino/icons/limit-19.7.png [new file with mode: 0644]
web/www/routino/icons/limit-19.8.png [new file with mode: 0644]
web/www/routino/icons/limit-19.9.png [new file with mode: 0644]
web/www/routino/icons/limit-19.png [new file with mode: 0644]
web/www/routino/icons/limit-2.0.png [new file with mode: 0644]
web/www/routino/icons/limit-2.1.png [new file with mode: 0644]
web/www/routino/icons/limit-2.2.png [new file with mode: 0644]
web/www/routino/icons/limit-2.3.png [new file with mode: 0644]
web/www/routino/icons/limit-2.4.png [new file with mode: 0644]
web/www/routino/icons/limit-2.5.png [new file with mode: 0644]
web/www/routino/icons/limit-2.6.png [new file with mode: 0644]
web/www/routino/icons/limit-2.7.png [new file with mode: 0644]
web/www/routino/icons/limit-2.8.png [new file with mode: 0644]
web/www/routino/icons/limit-2.9.png [new file with mode: 0644]
web/www/routino/icons/limit-2.png [new file with mode: 0644]
web/www/routino/icons/limit-20.0.png [new file with mode: 0644]
web/www/routino/icons/limit-20.png [new file with mode: 0644]
web/www/routino/icons/limit-21.png [new file with mode: 0644]
web/www/routino/icons/limit-22.png [new file with mode: 0644]
web/www/routino/icons/limit-23.png [new file with mode: 0644]
web/www/routino/icons/limit-24.png [new file with mode: 0644]
web/www/routino/icons/limit-25.png [new file with mode: 0644]
web/www/routino/icons/limit-26.png [new file with mode: 0644]
web/www/routino/icons/limit-27.png [new file with mode: 0644]
web/www/routino/icons/limit-28.png [new file with mode: 0644]
web/www/routino/icons/limit-29.png [new file with mode: 0644]
web/www/routino/icons/limit-3.0.png [new file with mode: 0644]
web/www/routino/icons/limit-3.1.png [new file with mode: 0644]
web/www/routino/icons/limit-3.2.png [new file with mode: 0644]
web/www/routino/icons/limit-3.3.png [new file with mode: 0644]
web/www/routino/icons/limit-3.4.png [new file with mode: 0644]
web/www/routino/icons/limit-3.5.png [new file with mode: 0644]
web/www/routino/icons/limit-3.6.png [new file with mode: 0644]
web/www/routino/icons/limit-3.7.png [new file with mode: 0644]
web/www/routino/icons/limit-3.8.png [new file with mode: 0644]
web/www/routino/icons/limit-3.9.png [new file with mode: 0644]
web/www/routino/icons/limit-3.png [new file with mode: 0644]
web/www/routino/icons/limit-30.png [new file with mode: 0644]
web/www/routino/icons/limit-31.png [new file with mode: 0644]
web/www/routino/icons/limit-32.png [new file with mode: 0644]
web/www/routino/icons/limit-33.png [new file with mode: 0644]
web/www/routino/icons/limit-34.png [new file with mode: 0644]
web/www/routino/icons/limit-35.png [new file with mode: 0644]
web/www/routino/icons/limit-36.png [new file with mode: 0644]
web/www/routino/icons/limit-37.png [new file with mode: 0644]
web/www/routino/icons/limit-38.png [new file with mode: 0644]
web/www/routino/icons/limit-39.png [new file with mode: 0644]
web/www/routino/icons/limit-4.0.png [new file with mode: 0644]
web/www/routino/icons/limit-4.1.png [new file with mode: 0644]
web/www/routino/icons/limit-4.2.png [new file with mode: 0644]
web/www/routino/icons/limit-4.3.png [new file with mode: 0644]
web/www/routino/icons/limit-4.4.png [new file with mode: 0644]
web/www/routino/icons/limit-4.5.png [new file with mode: 0644]
web/www/routino/icons/limit-4.6.png [new file with mode: 0644]
web/www/routino/icons/limit-4.7.png [new file with mode: 0644]
web/www/routino/icons/limit-4.8.png [new file with mode: 0644]
web/www/routino/icons/limit-4.9.png [new file with mode: 0644]
web/www/routino/icons/limit-4.png [new file with mode: 0644]
web/www/routino/icons/limit-40.png [new file with mode: 0644]
web/www/routino/icons/limit-41.png [new file with mode: 0644]
web/www/routino/icons/limit-42.png [new file with mode: 0644]
web/www/routino/icons/limit-43.png [new file with mode: 0644]
web/www/routino/icons/limit-44.png [new file with mode: 0644]
web/www/routino/icons/limit-45.png [new file with mode: 0644]
web/www/routino/icons/limit-46.png [new file with mode: 0644]
web/www/routino/icons/limit-47.png [new file with mode: 0644]
web/www/routino/icons/limit-48.png [new file with mode: 0644]
web/www/routino/icons/limit-49.png [new file with mode: 0644]
web/www/routino/icons/limit-5.0.png [new file with mode: 0644]
web/www/routino/icons/limit-5.1.png [new file with mode: 0644]
web/www/routino/icons/limit-5.2.png [new file with mode: 0644]
web/www/routino/icons/limit-5.3.png [new file with mode: 0644]
web/www/routino/icons/limit-5.4.png [new file with mode: 0644]
web/www/routino/icons/limit-5.5.png [new file with mode: 0644]
web/www/routino/icons/limit-5.6.png [new file with mode: 0644]
web/www/routino/icons/limit-5.7.png [new file with mode: 0644]
web/www/routino/icons/limit-5.8.png [new file with mode: 0644]
web/www/routino/icons/limit-5.9.png [new file with mode: 0644]
web/www/routino/icons/limit-5.png [new file with mode: 0644]
web/www/routino/icons/limit-50.png [new file with mode: 0644]
web/www/routino/icons/limit-51.png [new file with mode: 0644]
web/www/routino/icons/limit-52.png [new file with mode: 0644]
web/www/routino/icons/limit-53.png [new file with mode: 0644]
web/www/routino/icons/limit-54.png [new file with mode: 0644]
web/www/routino/icons/limit-55.png [new file with mode: 0644]
web/www/routino/icons/limit-56.png [new file with mode: 0644]
web/www/routino/icons/limit-57.png [new file with mode: 0644]
web/www/routino/icons/limit-58.png [new file with mode: 0644]
web/www/routino/icons/limit-59.png [new file with mode: 0644]
web/www/routino/icons/limit-6.0.png [new file with mode: 0644]
web/www/routino/icons/limit-6.1.png [new file with mode: 0644]
web/www/routino/icons/limit-6.2.png [new file with mode: 0644]
web/www/routino/icons/limit-6.3.png [new file with mode: 0644]
web/www/routino/icons/limit-6.4.png [new file with mode: 0644]
web/www/routino/icons/limit-6.5.png [new file with mode: 0644]
web/www/routino/icons/limit-6.6.png [new file with mode: 0644]
web/www/routino/icons/limit-6.7.png [new file with mode: 0644]
web/www/routino/icons/limit-6.8.png [new file with mode: 0644]
web/www/routino/icons/limit-6.9.png [new file with mode: 0644]
web/www/routino/icons/limit-6.png [new file with mode: 0644]
web/www/routino/icons/limit-60.png [new file with mode: 0644]
web/www/routino/icons/limit-61.png [new file with mode: 0644]
web/www/routino/icons/limit-62.png [new file with mode: 0644]
web/www/routino/icons/limit-63.png [new file with mode: 0644]
web/www/routino/icons/limit-64.png [new file with mode: 0644]
web/www/routino/icons/limit-65.png [new file with mode: 0644]
web/www/routino/icons/limit-66.png [new file with mode: 0644]
web/www/routino/icons/limit-67.png [new file with mode: 0644]
web/www/routino/icons/limit-68.png [new file with mode: 0644]
web/www/routino/icons/limit-69.png [new file with mode: 0644]
web/www/routino/icons/limit-7.0.png [new file with mode: 0644]
web/www/routino/icons/limit-7.1.png [new file with mode: 0644]
web/www/routino/icons/limit-7.2.png [new file with mode: 0644]
web/www/routino/icons/limit-7.3.png [new file with mode: 0644]
web/www/routino/icons/limit-7.4.png [new file with mode: 0644]
web/www/routino/icons/limit-7.5.png [new file with mode: 0644]
web/www/routino/icons/limit-7.6.png [new file with mode: 0644]
web/www/routino/icons/limit-7.7.png [new file with mode: 0644]
web/www/routino/icons/limit-7.8.png [new file with mode: 0644]
web/www/routino/icons/limit-7.9.png [new file with mode: 0644]
web/www/routino/icons/limit-7.png [new file with mode: 0644]
web/www/routino/icons/limit-70.png [new file with mode: 0644]
web/www/routino/icons/limit-71.png [new file with mode: 0644]
web/www/routino/icons/limit-72.png [new file with mode: 0644]
web/www/routino/icons/limit-73.png [new file with mode: 0644]
web/www/routino/icons/limit-74.png [new file with mode: 0644]
web/www/routino/icons/limit-75.png [new file with mode: 0644]
web/www/routino/icons/limit-76.png [new file with mode: 0644]
web/www/routino/icons/limit-77.png [new file with mode: 0644]
web/www/routino/icons/limit-78.png [new file with mode: 0644]
web/www/routino/icons/limit-79.png [new file with mode: 0644]
web/www/routino/icons/limit-8.0.png [new file with mode: 0644]
web/www/routino/icons/limit-8.1.png [new file with mode: 0644]
web/www/routino/icons/limit-8.2.png [new file with mode: 0644]
web/www/routino/icons/limit-8.3.png [new file with mode: 0644]
web/www/routino/icons/limit-8.4.png [new file with mode: 0644]
web/www/routino/icons/limit-8.5.png [new file with mode: 0644]
web/www/routino/icons/limit-8.6.png [new file with mode: 0644]
web/www/routino/icons/limit-8.7.png [new file with mode: 0644]
web/www/routino/icons/limit-8.8.png [new file with mode: 0644]
web/www/routino/icons/limit-8.9.png [new file with mode: 0644]
web/www/routino/icons/limit-8.png [new file with mode: 0644]
web/www/routino/icons/limit-80.png [new file with mode: 0644]
web/www/routino/icons/limit-81.png [new file with mode: 0644]
web/www/routino/icons/limit-82.png [new file with mode: 0644]
web/www/routino/icons/limit-83.png [new file with mode: 0644]
web/www/routino/icons/limit-84.png [new file with mode: 0644]
web/www/routino/icons/limit-85.png [new file with mode: 0644]
web/www/routino/icons/limit-86.png [new file with mode: 0644]
web/www/routino/icons/limit-87.png [new file with mode: 0644]
web/www/routino/icons/limit-88.png [new file with mode: 0644]
web/www/routino/icons/limit-89.png [new file with mode: 0644]
web/www/routino/icons/limit-9.0.png [new file with mode: 0644]
web/www/routino/icons/limit-9.1.png [new file with mode: 0644]
web/www/routino/icons/limit-9.2.png [new file with mode: 0644]
web/www/routino/icons/limit-9.3.png [new file with mode: 0644]
web/www/routino/icons/limit-9.4.png [new file with mode: 0644]
web/www/routino/icons/limit-9.5.png [new file with mode: 0644]
web/www/routino/icons/limit-9.6.png [new file with mode: 0644]
web/www/routino/icons/limit-9.7.png [new file with mode: 0644]
web/www/routino/icons/limit-9.8.png [new file with mode: 0644]
web/www/routino/icons/limit-9.9.png [new file with mode: 0644]
web/www/routino/icons/limit-9.png [new file with mode: 0644]
web/www/routino/icons/limit-90.png [new file with mode: 0644]
web/www/routino/icons/limit-91.png [new file with mode: 0644]
web/www/routino/icons/limit-92.png [new file with mode: 0644]
web/www/routino/icons/limit-93.png [new file with mode: 0644]
web/www/routino/icons/limit-94.png [new file with mode: 0644]
web/www/routino/icons/limit-95.png [new file with mode: 0644]
web/www/routino/icons/limit-96.png [new file with mode: 0644]
web/www/routino/icons/limit-97.png [new file with mode: 0644]
web/www/routino/icons/limit-98.png [new file with mode: 0644]
web/www/routino/icons/limit-99.png [new file with mode: 0644]
web/www/routino/icons/limit-no.png [new file with mode: 0644]
web/www/routino/icons/marker-0-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-0-red.png [new file with mode: 0644]
web/www/routino/icons/marker-1-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-1-red.png [new file with mode: 0644]
web/www/routino/icons/marker-2-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-2-red.png [new file with mode: 0644]
web/www/routino/icons/marker-3-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-3-red.png [new file with mode: 0644]
web/www/routino/icons/marker-4-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-4-red.png [new file with mode: 0644]
web/www/routino/icons/marker-5-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-5-red.png [new file with mode: 0644]
web/www/routino/icons/marker-6-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-6-red.png [new file with mode: 0644]
web/www/routino/icons/marker-7-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-7-red.png [new file with mode: 0644]
web/www/routino/icons/marker-8-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-8-red.png [new file with mode: 0644]
web/www/routino/icons/marker-9-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-9-red.png [new file with mode: 0644]
web/www/routino/icons/marker-home-grey.png [new file with mode: 0644]
web/www/routino/icons/marker-home-red.png [new file with mode: 0644]
web/www/routino/icons/waypoint-add.png [new file with mode: 0644]
web/www/routino/icons/waypoint-centre.png [new file with mode: 0644]
web/www/routino/icons/waypoint-down.png [new file with mode: 0644]
web/www/routino/icons/waypoint-home.png [new file with mode: 0644]
web/www/routino/icons/waypoint-remove.png [new file with mode: 0644]
web/www/routino/icons/waypoint-up.png [new file with mode: 0644]
web/www/routino/index.html [new file with mode: 0644]
web/www/routino/maplayout-ie6-bugfixes.css [new file with mode: 0644]
web/www/routino/maplayout-ie7-bugfixes.css [new file with mode: 0644]
web/www/routino/maplayout.css [new file with mode: 0644]
web/www/routino/noscript.cgi [new file with mode: 0755]
web/www/routino/noscript.html [new file with mode: 0644]
web/www/routino/noscript.template.html [new file with mode: 0644]
web/www/routino/page-elements.css [new file with mode: 0644]
web/www/routino/page-elements.js [new file with mode: 0644]
web/www/routino/paths.pl [new file with mode: 0644]
web/www/routino/results.cgi [new file with mode: 0755]
web/www/routino/router.cgi [new file with mode: 0755]
web/www/routino/router.css [new file with mode: 0644]
web/www/routino/router.html [new symlink]
web/www/routino/router.html.en [new file with mode: 0644]
web/www/routino/router.js [new file with mode: 0644]
web/www/routino/router.pl [new file with mode: 0644]
web/www/routino/statistics.cgi [new file with mode: 0755]
web/www/routino/visualiser.cgi [new file with mode: 0755]
web/www/routino/visualiser.css [new file with mode: 0644]
web/www/routino/visualiser.html [new file with mode: 0644]
web/www/routino/visualiser.js [new file with mode: 0644]
xml/Makefile [new file with mode: 0644]
xml/osm.xsd [new file with mode: 0644]
xml/routino-osm.xsd [new file with mode: 0644]
xml/routino-profiles.xml [new file with mode: 0644]
xml/routino-profiles.xsd [new file with mode: 0644]
xml/routino-tagging-nomodify.xml [new file with mode: 0644]
xml/routino-tagging.xml [new file with mode: 0644]
xml/routino-tagging.xsd [new file with mode: 0644]
xml/routino-translations.xml [new file with mode: 0644]
xml/routino-translations.xsd [new file with mode: 0644]
xml/xsd.xsd [new file with mode: 0644]

diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..7c79159
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1732 @@
+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.
+
diff --git a/INSTALL.txt b/INSTALL.txt
new file mode 120000 (symlink)
index 0000000..b0385da
--- /dev/null
@@ -0,0 +1 @@
+doc/INSTALL.txt
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..b6ee933
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,45 @@
+# $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
diff --git a/NEWS.txt b/NEWS.txt
new file mode 120000 (symlink)
index 0000000..7a887e7
--- /dev/null
+++ b/NEWS.txt
@@ -0,0 +1 @@
+doc/NEWS.txt
\ No newline at end of file
diff --git a/README.txt b/README.txt
new file mode 120000 (symlink)
index 0000000..253de0c
--- /dev/null
@@ -0,0 +1 @@
+doc/README.txt
\ No newline at end of file
diff --git a/agpl-3.0.txt b/agpl-3.0.txt
new file mode 100644 (file)
index 0000000..dba13ed
--- /dev/null
@@ -0,0 +1,661 @@
+                    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/>.
diff --git a/doc/ALGORITHM.txt b/doc/ALGORITHM.txt
new file mode 100644 (file)
index 0000000..2432a88
--- /dev/null
@@ -0,0 +1,212 @@
+                             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.
diff --git a/doc/CONFIGURATION.txt b/doc/CONFIGURATION.txt
new file mode 100644 (file)
index 0000000..fa6ae48
--- /dev/null
@@ -0,0 +1,177 @@
+                           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.
diff --git a/doc/DATA.txt b/doc/DATA.txt
new file mode 100644 (file)
index 0000000..8cd61ed
--- /dev/null
@@ -0,0 +1,115 @@
+                               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.
diff --git a/doc/INSTALL.txt b/doc/INSTALL.txt
new file mode 100644 (file)
index 0000000..123f02c
--- /dev/null
@@ -0,0 +1,158 @@
+                           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.
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644 (file)
index 0000000..5bc7047
--- /dev/null
@@ -0,0 +1,48 @@
+# $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)/*
diff --git a/doc/NEWS.txt b/doc/NEWS.txt
new file mode 100644 (file)
index 0000000..a003671
--- /dev/null
@@ -0,0 +1,177 @@
+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.
diff --git a/doc/OUTPUT.txt b/doc/OUTPUT.txt
new file mode 100644 (file)
index 0000000..4ebd742
--- /dev/null
@@ -0,0 +1,250 @@
+                              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.
diff --git a/doc/README.txt b/doc/README.txt
new file mode 100644 (file)
index 0000000..75fe606
--- /dev/null
@@ -0,0 +1,147 @@
+                  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.
diff --git a/doc/TAGGING.txt b/doc/TAGGING.txt
new file mode 100644 (file)
index 0000000..6c23d8c
--- /dev/null
@@ -0,0 +1,352 @@
+                           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.
diff --git a/doc/USAGE.txt b/doc/USAGE.txt
new file mode 100644 (file)
index 0000000..48721bd
--- /dev/null
@@ -0,0 +1,425 @@
+                               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.
diff --git a/doc/html/algorithm.html b/doc/html/algorithm.html
new file mode 100644 (file)
index 0000000..cec599f
--- /dev/null
@@ -0,0 +1,266 @@
+<!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 &amp; 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>
+&copy; Andrew M. Bishop = &lt;amb "at" gedanken.demon.co.uk&gt;
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
diff --git a/doc/html/configuration.html b/doc/html/configuration.html
new file mode 100644 (file)
index 0000000..98fa009
--- /dev/null
@@ -0,0 +1,256 @@
+<!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">
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;routino-tagging&gt;
+
+  &lt;way&gt;
+
+    &lt;if k="highway" v="motorway_link"&gt;
+      &lt;set v="motorway"/&gt;
+    &lt;/if&gt;
+
+    &lt;if k="highway" v="motorway"&gt;
+      &lt;output k="highway"/&gt;
+
+      &lt;output k="motorbike"  v="yes"/&gt;
+      &lt;output k="motorcar"   v="yes"/&gt;
+      &lt;output k="goods"      v="yes"/&gt;
+      &lt;output k="hgv"        v="yes"/&gt;
+      &lt;output k="psv"        v="yes"/&gt;
+
+      &lt;output k="paved"      v="yes"/&gt;
+      &lt;output k="multilane"  v="yes"/&gt;
+      &lt;output k="oneway"     v="yes"/&gt;
+    &lt;/if&gt;
+...
+  &lt;way&gt;
+
+&lt;/routino-tagging&gt;
+</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">
+&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
+&lt;routino-profiles&gt;
+
+  &lt;profile name="foot" transport="foot"&gt;
+    &lt;speeds&gt;
+...
+      &lt;speed highway="cycleway"      kph="4" /&gt;
+      &lt;speed highway="path"          kph="4" /&gt;
+      &lt;speed highway="steps"         kph="4" /&gt;
+    &lt;/speeds&gt;
+    &lt;preferences&gt;
+...
+      &lt;preference highway="cycleway"      percent="95" /&gt;
+      &lt;preference highway="path"          percent="100" /&gt;
+      &lt;preference highway="steps"         percent="80" /&gt;
+    &lt;/preferences&gt;
+    &lt;properties&gt;
+      &lt;property type="paved"      percent="50" /&gt;
+      &lt;property type="multilane"  percent="25" /&gt;
+      &lt;property type="bridge"     percent="50" /&gt;
+      &lt;property type="tunnel"     percent="50" /&gt;
+    &lt;/properties&gt;
+    &lt;restrictions&gt;
+      &lt;oneway obey="0" /&gt; 
+      &lt;weight limit="0.0" /&gt;
+      &lt;height limit="0.0" /&gt;
+      &lt;width  limit="0.0" /&gt;
+      &lt;length limit="0.0" /&gt;
+    &lt;/restrictions&gt;
+  &lt;/profile&gt;
+  &lt;profile name="horse" transport="horse"&gt;
+...
+  &lt;/profile&gt;
+...
+&lt;/routino-profiles&gt;
+</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">
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;routino-translations&gt;
+
+  &lt;language lang="en"&gt;
+...
+    &lt;turn direction="-4" string="Very sharp left" /&gt;
+    &lt;turn direction="-3" string="Sharp left" /&gt;
+    &lt;turn direction="-2" string="Left" /&gt;
+...
+    &lt;heading direction="-4" string="South" /&gt;
+    &lt;heading direction="-3" string="South-West" /&gt;
+    &lt;heading direction="-2" string="West" /&gt;
+...
+    &lt;route type="shortest" string="Shortest" /&gt;
+    &lt;route type="quickest" string="Quickest" /&gt;
+    &lt;output-html&gt;
+...
+    &lt;/output-html&gt;
+    &lt;output-gpx&gt;
+...
+    &lt;/output-gpx&gt;
+  &lt;/language&gt;
+&lt;/routino-translations&gt;
+</pre>
+
+</div>
+
+<!-- Content End -->
+
+<!-- Footer Start -->
+
+<div class="footer" align="center">
+<hr>
+
+<address>
+&copy; Andrew M. Bishop = &lt;amb "at" gedanken.demon.co.uk&gt;
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
diff --git a/doc/html/data.html b/doc/html/data.html
new file mode 100644 (file)
index 0000000..52f74aa
--- /dev/null
@@ -0,0 +1,165 @@
+<!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>
+&copy; Andrew M. Bishop = &lt;amb "at" gedanken.demon.co.uk&gt;
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
diff --git a/doc/html/example0.png b/doc/html/example0.png
new file mode 100644 (file)
index 0000000..4401486
Binary files /dev/null and b/doc/html/example0.png differ
diff --git a/doc/html/example1.png b/doc/html/example1.png
new file mode 100644 (file)
index 0000000..be0048c
Binary files /dev/null and b/doc/html/example1.png differ
diff --git a/doc/html/example2.png b/doc/html/example2.png
new file mode 100644 (file)
index 0000000..c4746d8
Binary files /dev/null and b/doc/html/example2.png differ
diff --git a/doc/html/index.html b/doc/html/index.html
new file mode 100644 (file)
index 0000000..2450127
--- /dev/null
@@ -0,0 +1,124 @@
+<!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>
+&copy; Andrew M. Bishop = &lt;amb "at" gedanken.demon.co.uk&gt;
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
diff --git a/doc/html/installation.html b/doc/html/installation.html
new file mode 100644 (file)
index 0000000..faa752f
--- /dev/null
@@ -0,0 +1,243 @@
+<!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>
+&copy; Andrew M. Bishop = &lt;amb "at" gedanken.demon.co.uk&gt;
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
diff --git a/doc/html/output.html b/doc/html/output.html
new file mode 100644 (file)
index 0000000..566d4ac
--- /dev/null
@@ -0,0 +1,364 @@
+<!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">
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
+&lt;HTML&gt;
+&lt;!-- Creator : Routino - http://www.routino.org/ --&gt;
+&lt;!-- Source : Based on OpenStreetMap data from http://www.openstreetmap.org/ --&gt;
+&lt;!-- License : http://creativecommons.org/licenses/by-sa/2.0/ --&gt;
+&lt;HEAD&gt;
+&lt;TITLE&gt;Shortest Route&lt;/TITLE&gt;
+...
+&lt;/HEAD&gt;
+&lt;BODY&gt;
+&lt;H1&gt;Shortest Route&lt;/H1&gt;
+&lt;table&gt;
+&lt;tr class='c'&gt;&lt;td class='l'&gt;&lt;td class='r'&gt;51.524677 -0.127896
+&lt;tr class='n'&gt;&lt;td class='l'&gt;Start:&lt;td class='r'&gt;At &lt;span class='w'&gt;Waypoint&lt;/span&gt;, head &lt;span class='b'&gt;South-East&lt;/span&gt;
+
+&lt;tr class='s'&gt;&lt;td class='l'&gt;Follow:&lt;td class='r'&gt;&lt;span class='h'&gt;Russell Square&lt;/span&gt; for &lt;span class='d'&gt;0.391 km, 0.5 min&lt;/span&gt; [&lt;span class='j'&gt;0.4 km, 0 minutes&lt;/span&gt;]
+...
+&lt;tr class='t'&gt;&lt;td class='l'&gt;Total:&lt;td class='r'&gt;&lt;span class='j'&gt;6.3 km, 5 minutes&lt;/span&gt;
+&lt;tr&gt;&lt;td class='l'&gt;Stop:&lt;td class='r'&gt;&lt;span class='w'&gt;Waypoint&lt;/span&gt;
+&lt;/table&gt;
+&lt;/BODY&gt;
+&lt;/HTML&gt;
+</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">
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;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"&gt;
+&lt;metadata&gt;
+&lt;desc&gt;Creator : Routino - http://www.routino.org/&lt;/desc&gt;
+&lt;copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/"&gt;
+&lt;license&gt;http://creativecommons.org/licenses/by-sa/2.0/&lt;/license&gt;
+&lt;/copyright&gt;
+&lt;/metadata&gt;
+&lt;trk&gt;
+&lt;name&gt;Shortest route&lt;/name&gt;
+&lt;desc&gt;Shortest route between 'start' and 'finish' waypoints&lt;/desc&gt;
+&lt;trkpt lat="51.524677" lon="-0.127896"/&gt;
+&lt;trkpt lat="51.523830" lon="-0.126993"/&gt;
+...
+&lt;trkpt lat="51.478353" lon="-0.103561"/&gt;
+&lt;trkpt lat="51.478244" lon="-0.103652"/&gt;
+&lt;/trkseg&gt;
+&lt;/trk&gt;
+&lt;/gpx&gt;
+</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">
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;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"&gt;
+&lt;metadata&gt;
+&lt;desc&gt;Creator : Routino - http://www.routino.org/&lt;/desc&gt;
+&lt;copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/"&gt;
+&lt;license&gt;http://creativecommons.org/licenses/by-sa/2.0/&lt;/license&gt;
+&lt;/copyright&gt;
+&lt;/metadata&gt;
+&lt;rte&gt;
+&lt;name&gt;Shortest route&lt;/name&gt;
+&lt;desc&gt;Shortest route between 'start' and 'finish' waypoints&lt;/desc&gt;
+&lt;rtept lat="51.524677" lon="-0.127896"&gt;&lt;name&gt;START&lt;/name&gt;
+&lt;desc&gt;South-East on 'Russell Square' for 0.391 km, 0.5 min&lt;/desc&gt;&lt;/rtept&gt;
+&lt;rtept lat="51.521815" lon="-0.124577"&gt;&lt;name&gt;TRIP001&lt;/name&gt;
+&lt;desc&gt;South-East on 'Russell Square' for 0.055 km, 0.1 min&lt;/desc&gt;&lt;/rtept&gt;
+...
+&lt;rtept lat="51.478244" lon="-0.103652"&gt;&lt;name&gt;FINISH&lt;/name&gt;
+&lt;desc&gt;Total Journey 6.3 km, 5 minutes&lt;/desc&gt;&lt;/rtept&gt;
+&lt;/rte&gt;
+&lt;/gpx&gt;
+</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>
+&copy; Andrew M. Bishop = &lt;amb "at" gedanken.demon.co.uk&gt;
+</address>
+
+</div>
+
+<!-- Footer End -->
+
+</BODY>
+
+</HTML>
diff --git a/doc/html/style.css b/doc/html/style.css
new file mode 100644 (file)
index 0000000..535e062
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+// 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;
+}
diff --git a/doc/html/tagging.html b/doc/html/tagging.html
new file mode 100644 (file)
index 0000000..5af6812
--- /dev/null
@@ -0,0 +1,658 @@
+<!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