Route Sources

The flight routes that VRS uses have been compiled from two sources: an automated extraction of routes from from ACARS logs compiled by http://www.acarsd.org/ and routes manually entered by users.

Route Statistics

The routes were last compiled on 21 Jan 2017 and contain 260,074 entries. 141,032 routes (54.2%) were collated from ACARS records over the period 01 Dec 2009 to 20 Jan 2017 and 119,042 routes (45.8%) were entered over the period 20 Feb 2013 to the present day by the following users:

UserRoutes
Slavi17,341
Jon Fear12,778
Pascal Ensinck8,983
MartinC4,440
Bernie4,343
HE9JSD, Georges4,154
elljay3,938
CharlieAlpha3,332
Thomas S.2,925
Jordy2,820
and bigrossco (2,768), Robert G. Schaffrath (2,673), ChristianS (2,385), AP100 (2,132), EGPD1701 (1,956), EDDT Manu (1,851), sib64 (1,614), Brian Leyton (1,418), paradiselost (1,347), sesom (1,345), whho (1,278), Andrew (1,194), andrw (1,117), pmaj (1,100), laurent (1,068), shun (1,061), rwinterhoff (910), Igor Chekhonin (903), ahe880 (744), delcomp (682), D. M. (644), lenovoparts (613), eastons (611), Chriso (598), jmd64 (597), argz (564), huebi77 (547), nik (541), Dauren (523), Paul C (497), verbatim (495), EDDB Berlin (474), Tomaz (470), admin_ksl (442), Rennan (407), trabin (382), Avioradar.com (381), bugjargal (378), nemexia (339), Cristian Amaya (325), wogman (318), HermanZA (314), Santi_levt (312), cetheri (310), Mark Taylor (297), Marek Krawczyk (290), untt (287), Kanok (286), Korni (278), KNakada (247), janne (232), Kooter (230), mmcgee (226), Alan R. (216), vjekic2 (196), giofloripa (192), IndoSpotter (190), aviatic (182), Vijay Karla (176), jazzbassNick (173), C Cook (172), MotherTeresa (172), Boiniche (167), fidaeextra (164), MGooden (153), Amlink (152), Thomas G. (149), clipsnotebook (145), URKK (145), msunz (141), AlexH (139), skyhawk (136), Luis Cova (132), sgt330 (129), Tyler (125), cdurand (119), Joaquin (117), Gregory G Harding (115), Alan Farley (114), André Baamonde (113), MaxenceLFRS (113), VRS-Calw (110), Dastin (108), Antti Takalo-K (106), RUS (106), gerault (102), Nagg (102), sergpan2008 (101), Bidgee (99), GaryG (97), esir (96), Cedric (95), Greg W (88), DOSDANE (87), SkierInAvon (86), NE_MilAir (85), DennyCrane (83), Dmitry (81), mekkawi (81), Renato Nagg (80), Kenneth (79), Lector (78), HSran (77), antonioag (75), Fuse (75), jcott (73), Sebastian (73), Fonok (70), flygfantast (69), Joel Harris (69), Mitch (68), Andos (66), Yasu (65), Dan Schaper (64), SpottersCostaRica (64), holnejs (63), nolatron (58), MJDBW (57), Samuel Rodriguez (56), geoff271989 (55), wogggieee (54), Skibox (53), xv4y (51), mouflon (49), patrice (48), Albert (45), Rick Scott (45), jose fernandes (44), Mario Uscanga (44), wilfrid (44), john mathieson (43), philipgm (43), dc10 (42), Michał Kuna (42), yonatan leibovits (42), Chris123 (41), noviarli (41), Chris Gault (40), Radiosutch (40), Rob (38), Bryan (37), kabooz (37), redeshazer (37), Matt.K (35), SkyView (35), Edgardo Barreto (33), Frederic (33), Matt English (33), Breitling (32), Emileigh (32), Steve Martin (32), Thibaud BENNET (32), Fritz (31), Vasiliy (31), URKK88 (30), backtobo (29), Ivan Luís (29), lion (29), swli209ve (29), Ulrich Zeller (29), DdePruis (28), spudjr (28), SomeGen (25), Bourne (24), Jens Holmström (24), Ale223 (23), Bungalow (23), OA4BQK (23), jolll (21), Jose Morales (21), Andreas (20), chakphanu (20), KSBS (19), Mark Meece (19), Matthew Jangelis (19), T-EGJA1 (19), Werner Baumann (19), Geoff G (18), sbartley (18), urrv (18), zmsg (18), boofums (17), Manuel (17), Agus Rahmani (16), Andrew83 (16), Avioradar (16), canei (16), dlampart (16), bg8sr (15), big_col (15), OST Virtual Aviations (15), SWE (15), Thiago Machado (15), cbocksta (14), haussman (14), hhrhhr (14), JBART (14), maciek561 (14), Renaud Bunel (14), szpajder (14), franck (13), joycody (13), Jürg Bärtschi (13), nilsonbastos (13), Ale2265 (12), HuweyII (12), JanVD (12), Kelvin Chong (12), Thomhun27 (12), TNDan (12), BMcQueen (11), gillesdenice (11), homestea1 (11), JohnJackson (11), M_VOCC1 (11), Migi (11), salamendri (11), Alexey (10), Bruce A (10), Dengaz (10), heypete (10), jmorgan (10), Kevin Pang (10), Ljubo (10), Micheal Spiers (10), planetrackerchicago (10), Qu Zhi (10), R000795 (10), Rian (10), SingingDwarf (10), zakredka (10), EVO (9), franzke (9), Gam (9), Kesha (9), kidshare (9), kinshasha (9), Leigh Cameron (9), neko (9), Nevermind (9), olivermbs (9), Roberto B (9), Sergei (9), 130dB (8), Alex Solia (8), Ariel (8), brisbanescan (8), Damjan Bogdanovski (8), DaveG (8), DPS (8), gg33 (8), Hugo BOUDET (8), jane (8), JonS (8), Jordi (8), Mariusz (8), Mark Rennie (8), MattBAe146 (8), mlhifi (8), Seb Gray (8), Senis (8), unff (8), Vardamir (8), Demart (7), emilio (7), hecruz (7), loplo (7), magicus (7), meurer (7), Pasquale (7), susertux (7), Andy Hill (6), Ankou75 (6), brianyyz (6), Captain Soares (6), ccie4526 (6), Colin Larsen (6), conkster (6), decula (6), dookie (6), grahaml44 (6), Grzegorz Tworek (6), Kevin McCormick (6), Luan Baroni (6), mzlz (6), PAT-LFST (6), Pierre VCT (6), sdeath (6), slubke (6), sp060 (6), steve (6), Vincent Buttstedt (6), Antti T-K (5), APF (5), ararek (5), Cooper! (5), Gerry Soejatman (5), James C (5), jike (5), KLS (5), pacoloco (5), padierna (5), pawel (5), Randall (5), rapidnetrick (5), ten4ten8 (5), Twente Radar (5), VK6DI (5), 476259 (4), adis4x (4), Andrew Hollingsworth (4), Ben (4), bjzq8 (4), Bob Carswell (4), Demon Lee (4), drew13btv (4), evertonma (4), fathi (4), Guerkan (4), Iwhite (4), JakkoFly (4), Jorge Mota (4), Julien VANHECKE (4), MaciekA380 (4), Paolo (4), retlow (4), Ricardo Reig (4), Shak7 (4), spottyshowers (4), Tucker Sizemore (4), William (4), youri2b (4), Albi (3), Aran Ellis (3), Ari@YWG (3), AZL (3), bahril (3), Cidikley Barbosa (3), Dean Gibbs (3), ez_duce (3), franckdosdane (3), fredpsu (3), Gerard v.d. Schaaf (3), hecky (3), i247198 (3), Jeramy Ross WX5TAL (3), K. Robbins (3), LFBD-3 (3), liolerobot (3), Mercator (3), patcoghm (3), pellonet (3), piper (3), ptaszelot (3), Reid (3), Rob Dale (3), sgaert (3), singsonn (3), stefplane (3), Steven Evans (3), Thorsten Zoerner (3), T-KOSH1 (3), Toby (3), veky (3), Vivi (3), WeKnowMC (3), westrayboy (3), ADSB (2), agardk (2), alloing (2), andycam (2), bem13 (2), chezokid44 (2), Cornmeister (2), criptwipe (2), dami131 (2), damien (2), dc8 (2), Deep (2), dreamgame (2), Eder Vieira (2), epic_toaster (2), ferole (2), Filippo (2), Finn McPherson (2), Glotych (2), graeme (2), grex (2), Iain (2), Ian Monroe (2), imrehg (2), itmaybeokay (2), Jack Plumb (2), jbro90 (2), Jeramy Ross (2), jercel (2), Jim A (2), John Erwin (2), Joshua Riley (2), jydoulliez (2), KC2LSN (2), kjablonski (2), LaurensEsveldt (2), LU8FAU (2), Marcos Roque (2), mario (2), markino (2), MBu (2), Michael (2), michael kraan (2), Mig (2), Mike Jackson (2), Nathan (2), natzzzy9119 (2), P.VINCENT (2), Petr (2), Phr34kz (2), PierreVincent (2), proze (2), ptj (2), R. Snell (2), Raoul Maujeamn (2), Rob Wise (2), Ronald Perkins (2), sguy (2), shorty (2), Steve Good (2), strike772 (2), TEDW30 (2), Tom S. (2), Trafegoaereo.com (2), Vaz (2), Xantiane (2), 1090s (1), adamp (1), aizanin (1), ajcoll5 (1), aligassan (1), Andy Edge (1), Andy Swanson (1), Anri (1), antoniolocandro (1), AOA (1), Arve Larsen (1), asrazin (1), bartusek (1), bgalex (1), BGM (1), boadracu (1), brettkp (1), Brian (1), Bucc69 (1), Capecod (1), chazzie (1), chen (1), chrisdotpy (1), cmp128 (1), Costa Júnior (1), Dakky (1), damien138 (1), Darren Olivier (1), delboy (1), Derek Bertram (1), dwi argo mk (1), EDLM (1), esgg (1), evergreek (1), F4FXL (1), falcon (1), fellow (1), Florian Wrobel (1), flyersa (1), flytiger (1), Flytiger41 (1), foophoof (1), Franz (1), G7RUH (1), Gabino (1), gambarumba (1), GerryS (1), Goldy714 (1), GordonL (1), Gourheu (1), grrx (1), Guillermo (1), hassel (1), hb9eya (1), heliks (1), henryhu (1), im7575 (1), Jantje (1), Joao Brito (1), jonnathanjrm (1), Justin Palmer (1), justsomeguy (1), kd4ggy (1), lekio (1), litox (1), Louwrens (1), lukas125p (1), m31 (1), Marika (1), Mark Turner (1), matt (1), matthesv (1), Matthew P (1), miguel (1), Miguel Teixeira (1), mikefallon (1), MikeTwoOne (1), mtpratt (1), n5pyk (1), neslin (1), nhasan (1), Noel (1), nutrot (1), P.A (1), p1lts (1), pac (1), Patryk (1), Paul Sekuh (1), pavleto5 (1), plngeek (1), plohse (1), plurkmans (1), Radarboxbrasil (1), Rafael Meurer (1), ramonk (1), RBBrasil (1), renato cano (1), robee75 (1), Robert S (1), Robin (1), Rodrick (1), RuppinRadar (1), sajunky (1), scnarine (1), scotjer (1), Scott Hermon (1), Shamy (1), Simon (1), Skyscraper (1), snake29 (1), Sp8472 (1), stanno (1), Stefan (1), Steve N (1), Steven Smith (1), TedH (1), T-EPKK42 (1), theo (1), tmik (1), Tobi M (1), Tomasz (1), Tomi (1), twicked (1), URRV8 (1), vko (1), wesker (1), William Vignes (1), williamh25 (1), Xe01 (1), yuri ferreira (1), YYZ342 (1).

CSV Files

Older versions of Virtual Radar Server loaded route data from CSV files that were downloaded every day. The CSV files are no longer in use (with the exception of the FlightNumberCoverage file) but they continue to be compiled and made available for users who are still running the older versions of VRS.

FlightNumberCoverage.csv
This is a comma-separated list with one row containing information about the current flight route files. The fields are:
StartDate
The date of the first ACARS report in yyyy-mm-dd format.
EndDate
The date of the last ACARS report in yyyy-mm-dd format.
Count
The number of flight routes gleaned from the ACARS reports and entered by users.
AirlinesMD5
The MD5 checksum of the latest Airlines.csv file (no longer used by VRS).
AirportsMD5
The MD5 checksum of the latest Airports.csv file (no longer used by VRS).
TypesMD5
The MD5 checksum of the latest AircraftTypes.csv file (no longer used by VRS).
CodeBlocksMD5
The MD5 checksum of the latest Countries.dat file (no longer used by VRS).
StandingDataZipMD5
The MD5 checksum of the latest StandingData.sqb.gz file available for download.
BasicLookupZipMD5
The MD5 checksum of the latest BasicAircraftLookup.sqb.gz file (no longer used by VRS).
FlightNumbers.csv
This is a comma-separated list of each route. The fields are:
AirlineCode
Usually the IATA code of the airline, occasionally the ICAO code.
FlightNumber
The flight number with leading zeros stripped off. Usually a simple number but can contain text as well.
Route
the airports that constitute the route, separated by hyphens. Usually the ICAO codes of the airports but occasionally the IATA code is used.
FlightNumberVotes.csv
This is a comma-separated list recording the history of all flights and routes seen across all of the ACARS reports. ACARS transmissions occasionally contain mistakes or ommissions in the flight number or route. What the code does is keep a history (in this file) of the routes seen for every flight number, recording against each one the number of times it was seen and the date it was last seen. From this it chooses the most popular route for a flight number for inclusion in the FlightNumbers.csv file.

This does not contain any flights that have been entered by users. Some flights may appear in here even though they are not included in the compiled routes. The fields in the history file are:
AirlineCode
usually the IATA code of the airline, occasionally the ICAO code.
FlightNumber
the flight number with leading 0s stripped off.
Route
the route seen against this airline code / flight number.
Votes
the number of times this route was seen for this airline code / flight number.
LastSeen
the date, in yyyy-mm-dd format, that this route was last seen for this airline code / flight number.
Winner
Y if the route is used in the FlightNumbers.csv file, N if it is considered to be a mistake and has been ignored.

Database Files

From version 1.2 Virtual Radar Server switched over from using the CSV files to using an SQLite database of standing data, which includes flight routes.

A GZIP archive of the current database can be downloaded from here: StandingData.sqb.gz

The schema diagram for the database is here. Note that some indexes which you would usually expect to see on the tables are omitted to keep the file size down. Only indexes that support Virtual Radar Server's usage are present. The tables are:

DatabaseVersion
One record holding the schema version and creation date of the database file.
Route
One record per flight route.
RouteStop
One record per stopover in a route. The order of stopovers is indicated by SequenceNo. A route with no stopovers will have no RouteStop record.
Operator
One record per airline.
Airport
One record per airport.
Country
One record per country. As two different sources are used to build this table some countries may be in there twice if the two sources refer to it with different names.
CodeBlock
One record per ICAO24 allocation block for a country. See notes below.
AircraftType
One record per ICAO8643 aircraft type.
Model
One record per aircraft model. Every aircraft type has at least one model.
Manufacturer
One record per manufacturer of an aircraft model. Generic models (e.g. "Balloon") do not have a manufacturer.
AircraftTypeModel
One record per combination of AircraftType and Model. Many Models can be referred to by the same AircraftType ICAO code.
EngineType
One record per ICAO8643 engine type.
EnginePlacement
One record per engine placement enum value. Introduced in version 5 of the schema.
Species
One record per ICAO8643 species.
WakeTurbulence
One record per ICAO8643 wake turbulence category.

Using the route tables directly is not recommended as they are subject to change without notice. The views are less likely to be changed. They are:

RouteView
A join between Route, Operator, Airport and Country. Does not include stopovers.
RouteStopView
A join between RouteStop, Airport and Country.
AircraftTypeView
A join between AircraftTypeModel, AircraftType, Model, Manufacturer, EngineType, Species and WakeTurbulence.
AircraftTypeNoEnumsView
A join between AircraftTypeModel, AircraftType, Model and Manufacturer.
CodeBlockView
A join between CodeBlock and Country.

CodeBlock Lookup

The CodeBlock records tell you which country an ICAO24 was allocated to and give an indication as to whether the ICAO24 is used by that country's military. They are compiled from the latest countries.dat file as maintained by Kinetic forum user 'SabreJV' and hosted by Kinetic forum user 'Bones'.

The steps to find the correct CodeBlock (or CodeBlockView) record for an ICAO24 are:

  1. Sort the CodeBlocks into descending order of SignificantBitMask.
  2. Find the first CodeBlock record where the result of anding SignificantBitMask and the ICAO24 equals the BitMask.

This C# function shows the procedure:

CodeBlockView FindCodeBlockView(IEnumerable<CodeBlockView> codeBlocks, int icao24)
{
    CodeBlockView result = null;
    foreach(var codeBlock in codeBlocks.OrderByDescending(r => r.SignificantBitMask)) {
        if((icao24 & codeBlock.SignificantBitMask) == codeBlock.BitMask) {
            result = codeBlock;
            break;
        }
    }
    return result;
}

CodeBlock Overrides

The code block records in the standing data database indicate which country's register an aircraft's ICAO belongs to, and whether that aircraft is military or civilian.

There are some disagreements over what constitutes a military agency - for example, in some countries the police are a civil agency whereas in others they are a military agency, so some people might consider their helicopters to be military while others might consider them to be civilian.

Starting with version 2 of Virtual Radar Server you can override the IsMilitary flag in the standing data database for individual ICAOs.

To do this you have to create a file called LocalAircraft.txt in Virtual Radar Server's configuration folder (to get to the configuration folder go to Help | About and click the link to the configuration folder there).

An example of the file's content is as follows:

# The hash symbol denotes the start of a comment. All text after the hash,
# up to the end of the line, is ignored.

# Blank lines are also ignored.

# You need to tell VRS which country an overridden ICAO belongs to.
# To do this put the country's name in square brackets.
# All ICAOs following a country's name will be shown as being in that country's register.

[United Kingdom]

# Each aircraft override must be on a line of its own.
# An aircraft override consists of the ICAO, in hex, followed by either CIV or MIL to
# indicate that it is civilian or military.
# Neither the ICAO nor the civ/mil indicator are case sensitive.
# The number of spaces or tabs between the ICAO and civ/mil indicator are not important.
3986e8  mil   # An Air France Regional E170
40612c  mil   # An easyJet A319

[Made-up Country]
484397  civ   # An Arkefly B767

In the example above the Air France and easyJet aircraft will be shown as military jets on the United Kingdom's register while the Arkefly B767 will be a civilian jet on Made-Up Country's register.

Loading the File

Virtual Radar Server will read your LocalAircraft.txt file every time it caches data from the standing data database. This happens when the server first starts and after a new standing data database is downloaded from the server, which generally happens once every 24 hours.

Error Logging

If the server finds a mistake in the syntax of your LocalAircraft.txt file then it will write messages to the VirtualRadarLog.txt file. You can get to this via the Tools | Open VirtualRadarLog.txt menu entry.

Custom Routes

Virtual Radar Server no longer supports custom routes. If you have existing custom route files for routes that are not known to VRS then please submit them here.