Traveling salesman

From OpenStreetMap Wiki
(Redirected from Traveling Salesman)
Jump to navigation Jump to search
This page describes a historic artifact in the history of OpenStreetMap. It does not reflect the current situation, but instead documents the historical concepts, issues, or ideas.
Traveling salesman was a routing and navigation program for the OpenStreetMap written in Java for desktop computers.
Reason for being historic
Development ceased in 2011.
Captured time

Traveling Salesman
Traveling salesman screenshot.jpg
Author: Marcus Wolschon
License: GNU General Public License
Platforms: Windows, Windows 2000, Windows XP, and Linux
Status: Unmaintained
Version: 1.0.3-RC1 (2013-05-02)
Language: English
Source code:
Programming language: Java

Highly modular router


The current version 1.0.2 is using OpenStreetMap API 0.6 but supporting local and downloaded files in API 0.5 too.
SVN contains a newer version that support using the H2-database or MySQL instead of the OsmBin file-format to store your local map (planned to be released as version 1.1.0).


TravelingSalesman-Logo75px.png Traveling-Salesman is a routing and navigation program for the OpenStreetMap. It is written to encourage experimentation. Nearly every part of it is developed as a plugin and can be replaced. (See here for the plugins and extension-points offered to plug into)

  • route-calculations (multiple easy to understand algorithms already supplied)
  • metric to optimize a route for (e.g. "most fuel efficient route")
  • gps-interfacing (gpsd, serial-ports, bluetooth-gps, nmea- or gpx-file)
  • driving-instructions
  • voice-output
  • finding places
  • drawing a map with overlaid route,...
  • act as a gpsd for JOSM-LiveGPS
  • database/file-format to store the map in

Traveling-Salesman consists of 3 parts:


A standalone navigation-program utilizing OSMNavigation.

TS is only a very thin layer of gui-code and custom widgets to provide as much as possible for other developers in OSMNavigation.

After completing a config-wizard it is a fully featured navigation-program that is in common use on the road.



  • support serial-port, Bluetooth and internal gps-devices
  • including GPS auto-detection
  • as well as NMEA and GPX -files with fast-forward and pause for testing.


  • search for house-numbers (since 0.9.7 fully supporting the Karlsruhe Schema)
  • support for polygons describing the exact city-limits
  • support for cities missing such polygons
  • search for places outside the local map by using the namefinder

Routing and Navigation-support

Map and Map-Rendering -support

  • import and update maps from inside the program
  • update existing and download missing areas directly from the API v0.6/Roma-server
  • download country-maps from different ftp-mirrors by selecting them form a menu
  • multiple rendering-plugins to choose from
  • render places outside the local map by downloading tiles

Plugin and Tool-integration -support

  • extend and customize everything using plugins
  • click "edit in JOSM" to edit the currently visible area and fix errors in the map


A Library for writing navigation- and route-planning -software for OpenStreetMap.

It contains plugins for

  • finding routes,
  • different metrics, (shortest, fastest, most fuel-efficient, scenic,...)
  • gps-handling,
  • giving driving-instructions,
  • finding addresses,
  • real-time map-painting

and an optional manager-class to do the housekeeping between them and act as a model.


A Library for easy working with OpenStreetMap-Data.

It utilizes Osmosis for the low-level tasks and extends it with coordinate-transformations, data-filtering and cleaning, transparent map-access, and memory-management for using all of the database while keeping only a fraction of it in memory.

It also provides for user-preferences and a very simple to use plugin-architecture that is heavily used to make parts interchangeable.

Multiple backends for storing the map-database are provided ranging from the OSMbin file-format, an embedded HsqlDB to osm-xml-files for each tile down to an in-memory-operation.

LibOSM can also act as a plugin for Osmosis to add additional tasks.

using Traveling Salesman as a GPSD for JOSM

I was frustrated to not find a GPSD (GPS daemon) for Windows. So I added a feature to Traveling Salesman to make it act as a minimal GPSD-Server for JOSM.


  • start Traveling Salesman (the traveling_salesman.jar is executable)
  • open "preferences"->"navigation"
  • make sure "Port for gpsd-emulatio" is set to 2947
  • set "get position from" to JGPSProvider (or GPXFileProvider for testing)
  • for JGPSProvider set "JGPS com-port description" to

"COM5,19200,8,1,N" or similar.

  • start JOSM and let LiveGPS connect.

Currently there is an "open in josm" -button in Traveling Salesman, to download the latest josm (if not yet present) and open the currently visible area in it. A new button "survey roads" that downloads and starts josm including liveGPS and Surveyor may follow soon. This way you can start surveying with one click if you see a missing street while navigating from A to B.

Using Traveling Salesman

You can also use Traveling Salesman on the command-line in shell-scripts/batch-scripts:

java -jar traveling_salesman.jar import [filename|URL] # import a planet.osm from the specified URL
java -jar traveling_salesman.jar route [options] [location] [location]* [location] # routes between the given nodes outputting CSV
   -router <classname>  # default <classname> to TurnRestrictedAStar
   -metric <classname>  # default <classname> to StaticFactestRouteMetric
   -vehicle <classname> # default <classname> to Motorcar
   -loadmap <file.osm>  # load <file.osm> into memory instead of using the local map
   -gpx <file.gpx>      # write gpx data to <file.gpx>
   -csv <file.csv>      # write csv data to <file.csv>
location can be either:
   <nodeID>              # <nodeID> from openstreetmap
   [<lat>,<lon>]         # <lat> and <lon>

Example usage:

 java -jar traveling_salesman.jar import benelux.osm
 java -jar travaling_salesman.jar route -gpx route.gpx [52.371000,4.900119] [50.846290,4.351048]