# Tachwire circuit catalogue — sources and licence

One file per country, built by `tools/tracks/build.py` from OpenStreetMap: `gb.json` (United Kingdom), `de.json`
(Germany), `at.json` (Austria), `ch.json` (Switzerland), `es.json` (Spain), `fr.json` (France), `be.json` (Belgium),
`it.json` (Italy), `pt.json` (Portugal), `pl.json` (Poland), `ru.json` (Russia), `tr.json` (Turkey), `jp.json`
(Japan), `cn.json` (China), and in the Americas `br.json` (Brazil), `mx.json` (Mexico), `ar.json` (Argentina) — the
countries of the languages the app speaks. They are published openly at https://tachwire.app/data/tracks/;
`index.json` next to them gives each country's file with its version, size and SHA-256. The Tachwire app downloads
these files to offer "Pick a circuit"; a venue added to OpenStreetMap reaches the app with the next rebuild of the
file, without an app update.

## Licence of the database

The catalogue is made from OpenStreetMap data and is therefore a Derived Database made available under the
**Open Database License (ODbL) 1.0**: https://opendatacommons.org/licenses/odbl/1-0/ (full text in `LICENSE.txt`
next to this file). You may copy, adapt and share it under the same licence, with the attribution below.

## Attribution

"Contains information from OpenStreetMap, © OpenStreetMap contributors, available under the Open Database License
(ODbL)" — https://www.openstreetmap.org/copyright

The app shows this attribution on the circuit list, on a track picked from it, in the line editor and under
More → Licenses; https://tachwire.app/licenses lists it too.

## What was taken and how it was changed

- Venues: `highway=raceway` ways with a motor-racing `sport`, the ways of `type=circuit` relations, `leisure=track`
  areas with `sport=motor`, and raceways without a sport that touch them. Ways within 250 m of each other, or inside
  one named motor-sport area, form one venue. The venue's name is the name (`name`) of that area, of its circuit
  relations, of its ways, or of the named OpenStreetMap area the track lies in; `nameEn` is that element's
  `name:en` where OpenStreetMap has one.
- Each country is its boundary in OpenStreetMap (`admin_level=2`). Russia's file leaves out Crimea and Sevastopol.
- Left out: karting, motocross and other dirt tracks, drag strips, model-car tracks, rides in amusement parks,
  driver-training yards, historic and abandoned circuits, circuits on public roads, private test tracks named so or
  on industrial or military land, tracks shorter than 400 m. The rules are in `tools/tracks/tracks.py`.
- **Not in the catalogue: the Nürburgring Nordschleife.** It is driven as Touristenfahrten, where the circuit's
  rules forbid any timing, Bridge-to-Gantry included (Nürburgring Fahrordnung § 2 no. 11,
  https://nuerburgring.de/info/company/gtc/driving-regulations). Its ways (OpenStreetMap relation 38566), its link
  roads and its own pit area are left out, so no Nordschleife layout, outline or line is published. The
  Nürburgring Grand-Prix-Strecke is in `de.json`.
- Layouts: one per `type=circuit` relation; a venue without one is a single layout.
- Outlines: the venue's ways joined end to end and simplified to about 5 m (Douglas-Peucker).
- Lengths: a layout's `lengthM` is one lap of its relation's ways when they close into exactly one loop, else
  null. Where the loop closes but disagrees with the circuit's published length by more than 3 %, the length is
  withheld (null); those circuits and the sources compared are listed in `tools/tracks/tracks.py`
  (`LENGTH_WITHHELD`).
- Lines: where OpenStreetMap has a `raceway=start-finish`, `start` or `finish` node on the track. The direction of
  travel is that of the one-way raceway at the node; where the raceway is not one-way it is left unknown
  (`headingDeg: null`, with `axisDeg` the line of the road). The width is the way's `width` tag, or 12 m marked
  `widthSource: "default"`. Each line names the node it comes from (`source`).
- **Bedford Autodrome (`gb.json`)**: OpenStreetMap has its four circuits (West, North, South, East) and their links
  but no line node and no circuit relations. Its layouts (GT, SW, SEN, West, North, South, East) and lengths are
  from the circuit (https://www.bedfordautodrome.co.uk/about/circuit-layouts) and RacingCircuits.info
  (https://www.racingcircuits.info/europe/united-kingdom/bedford-autodrome.html). The line of GT, SW and West is
  placed on the OpenStreetMap node of the pit straight nearest the middle of the main pit lane, from the published
  description "West 1, which is the first corner after passing the main pits complex" (Lotus on Track,
  https://www.lotus-on-track.com/circuit-guides/bedford-autodrome/). Such a line carries `derivedFrom` and
  `sources`; nothing was traced from aerial imagery. SEN, North, South and East have no line: no source says where.
- **Our own laps.** A layout may also carry geometry measured on laps driven with the Tachwire app (`survey`, with
  `source: "own laps"`): Bedford Autodrome GT, from 8 timed laps in two sessions on 12.10.2026. Its outline is the
  mean driven line of those laps (phone GNSS, 1 Hz; laps within 2.8 m of the mean at p90), its `lengthM` the length
  of that line (checked against the published 6.11 km, ±3 %); the `survey` block adds the start/finish on the driven
  line, three equal sectors, the 18 corners in driving order (the circuit publishes their count, 10 left and 8 right,
  but no numbers or names), and the main pit lane — the OpenStreetMap way, confirmed by the heading and distance of
  two in-laps and two out-laps — with gates into and out of it. The survey's `verified` says whether its own
  criterion is met (at least 2 sessions and 8 laps, laps and sessions within 5 m at p90); it is not a check against
  imagery. These measurements are part of this database under the same licence. The line the app times with stays
  the OpenStreetMap node above.
- Nothing in the catalogue has been checked against imagery: every line is `verified: false`. A venue without a line
  is listed with its outline and `line: null`, and the app asks the driver to place the line.
