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
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-planing -software for OpenStreetMap.

It contains plugins for

  • finding routes,
  • different metrics, (shortest, fastest, most fuel-efficient, scenic,...)
  • gps-handling,
  • giving driving-instructions,
  • finding addresses,
  • realtime 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 interchangable.

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 inclusing 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 [optiona] [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]