<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hbeni</id>
	<title>FlightGear wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hbeni"/>
	<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/Special:Contributions/Hbeni"/>
	<updated>2026-04-09T12:19:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=143158</id>
		<title>De/FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=143158"/>
		<updated>2025-12-04T08:44:26Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Bekannte Inkompatibilitäten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simuliert Funkkommunikation basierend auf der freien VoIP software [https://www.mumble.info/ Mumble]. Es integriert sich vollstädnig mit den Funkgeräten deines Flugzeuges in FlightGear und erlaubt dir, mit anderen Piloten und Fluglotsen auf realistische Weise zu kommunizieren. Dafür simuliert es ein lückenloses Radiowellenspektrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble ist eine Alternative zum altbekannten [[FGCom]] sowie [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend]. &lt;br /&gt;
&lt;br /&gt;
FGCom-mumble nutzt den Pluginmechanismus, der in Mumble 1.4.0 verfügbar wurde und benötigt lediglich ein vorkompiliertes Plugin, das von einem ganz normalen Mumble-Programm geladen wird. Das aktuellste Release kannst du hier herunterladen: https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Server ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
* Der FGCom-mumble test server ist &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Statusseite für diese Instanz, die alle verbundenen Clients anzeigt, ist hier: https://fgcom-dev.hallinger.org/&lt;br /&gt;
* Der mumble-testserver benutzt ein autoerneuerndes SSL-Zertifikat von Lets Encrypt.&lt;br /&gt;
&lt;br /&gt;
== Hauptziele des Projektes ==&lt;br /&gt;
* Bereitstellen von Kommunikation, die sowohl örtlich als auch kanaltechnisch getrennt ist&lt;br /&gt;
* Realistische Funkkommunikation&lt;br /&gt;
* Einfachheit in der Installation und Benutzung&lt;br /&gt;
* Unterstützung für beliebige Frequenzen&lt;br /&gt;
* ATIS Aufnahme und Wiedergabe&lt;br /&gt;
* Zivile Radiostationen sollen unterstützt werden&lt;br /&gt;
* Festnetz/Intercom Unterstützung&lt;br /&gt;
* RDF-Signale für Clients&lt;br /&gt;
* Einfach auf einem Server zu installieren und zu betreieben&lt;br /&gt;
* Unabhängigkeit von Simulatoren wie z.B. Flightgear&lt;br /&gt;
* Fähigkeit, in FlightGear integriert zu werden, mit der Option, weitere Clients und Applikationen zu unterstützen (ATC, aber auch andere Flugsimulatoren)&lt;br /&gt;
* Modularer Aufbau, damit einzelne Komponenten unterschiedlich implementiert werden können und einfache Erweiterbarkeit besteht&lt;br /&gt;
* Gute und vollständige Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Installation and Einrichtung ==&lt;br /&gt;
Die aktuelle Version kann hier heruntergeladen werden: [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] bietet auch eine Debug-Variante an).&lt;br /&gt;
&lt;br /&gt;
Die  [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#installation--einrichtung-des-mumble-plugins README] bietet detaillierte Angaben zur Installation.&lt;br /&gt;
&lt;br /&gt;
Jemand hat sogar ein Video (engl.) von der Installation gemacht! :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* Du brauchst ein installiertes und eingerichtetes Mumble &amp;gt;= 1.4, und dann lade darin das Plugin (unter mumble Einstellungen/plugins)&lt;br /&gt;
* Auf dem Mumbleserver (Version &amp;gt;= 1.4.0) trittst du einem Channel bei, dessen Name mit `fgcom-mumble` beginnt&lt;br /&gt;
* Im FlightGear-Launcher fügst du im Addon-Tab den `fgfs-addon` Ordner der FGCom-Mumble Veröffentlichung hinzu&lt;br /&gt;
* Starte FlightGear und benutze deine Funkgeräte (du funkst mit den ganz normalen FGCom-Tastenkombinationen; siehe unten)&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
FlightGear's FGCom-mumble Protokoll benutzt die normalen FGCom-Tastenkombinationen:&lt;br /&gt;
* Um auf COM1 zu funken, drückst du {{Key press|Space}}. Solange du überträgst, kannst du keine anderen Piloten durch das verwendete Funkgerät hören (diese sind Halbduplexgeräte).&lt;br /&gt;
* COM2 sendet mit {{Key press|Shift|Space}}.&lt;br /&gt;
* Seit FGCom-mumble 1.2.0:&lt;br /&gt;
** Mit COM3 funkst du über {{Key press|Alt|Space}} (früher musstest du ein eigenes Keybind definieren),&lt;br /&gt;
** Intercom sendet in full-duplex mit {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Jedes Funkgerät kann außerdem über die COMBar benutzt werden (öffnen über ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
Um FGCom-mumble ohne FlightGear zu probieren, kannst du auch die im Release mitgelieferte RadioGUI starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deine Installation testen ===&lt;br /&gt;
Als erstes solltest du sicherstellen, dass mumble an Sich gut funktioniert und du gut zu verstehen bist sowie andere gut verstehst.&lt;br /&gt;
Dazu deaktivierst du am Besten das Plugin oder du sprichst mit anderen auf einem Channel, der nicht mit `fgcom-mumble`beginnt.&lt;br /&gt;
&lt;br /&gt;
Das Plugin verändert Mumbles eingehende Audiopakete. Es fügt statisches Rauschen hinzu, das von der simulierten Funksignalstärke abhängt oder hebt den stream sogar auf, wenn der Funksender außerhalb der Reichweite liegt. Ausgehende Audiopakete werden nicht verändert.&lt;br /&gt;
&lt;br /&gt;
Falls der Server es unterstützt, kannst du auch einen traditionellen Echo-Test machen (dazu muss am Server ein `fgcom-recorder-bot` laufen). Funke auf der Frequenz `910.00` MHz und der Recorderbot wird mit der Aufzeichnung beginnen (er schreibt das in den mumble-chat) und nach Abschluss einen bot an deiner Position erzeugen, der das aufgenommene auf der Frequenz wiedergibt. So kannst du dich selbst hören, wie andere dich hören würden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebung ===&lt;br /&gt;
&lt;br /&gt;
Schau bitte in die [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#fehlerbehebung README] des Projekts. Diese hat detaillierte Informationen hierzu.&lt;br /&gt;
&lt;br /&gt;
Solange es nichts grundlegendes mit der Installation zu tun hat, hilft oft auch einfach ein Neustart von Mumble (das Plugin initialisiert sich selbständig frisch).&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität ===&lt;br /&gt;
FGCom-mumble unterstützt grundsätzlich das alte FGCom-UDP-Protokoll und sollte somit kompatibel mit allen clients sein, die dieses verwenden (z.B. ältere ATCpie oder OpenRadar Versionen). Allerdings gibt es auch ein paar Erweiterungen, die mit dem alten Protokoll nicht zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
* FlightGear wird durch ein [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon] unterstützt. Dieses erwartet die Standard-Funkgerätimplementierung (und funktioniert getestet zumindest mit der C172p und der C182S).&lt;br /&gt;
*[[ATC-pie]] hat eine integrierte Unterstützung (prüfe, ob &amp;quot;FGCom-mumble&amp;quot; anstelle von nur &amp;quot;FGCom&amp;quot; in den Einstellungen aktiviert ist).&lt;br /&gt;
*[[OpenRadar]] Unterstützt im Moment nur COM1 ([https://sourceforge.net/p/openradar/tickets/5/ Ticket dazu ist offen]). Für COM2 und weitere musst du entweder separate Mumble-Instanzen öffnen oder FGCom-mumble's RadioGUI zum Funken benutzen.&lt;br /&gt;
:Es gibt eine gepatchte Version von OpenRadar mit integriertem FGCom-mumble sowie 8.33 Channelmodus; verfügbar hier: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
==== Bekannte Inkompatibilitäten ====&lt;br /&gt;
* Das alte FGCom aktiviert sich selbständig, wenn du mit dem Mehrspielernetzwerk verbunden bist und dann die &amp;quot;FGCom&amp;quot;-Einstellungen (anstelle des &amp;quot;FGCm-Mumble&amp;quot;-Eintrags) aus dem Mehrspielermenü aufrufst. Wenn du mit aktiviertem alten FGCom PTT aktivierst, kann FlightGear abstürzen (aktuelle FGcom-mumble addons haben einen Workaround dafür).&lt;br /&gt;
* Das FlightGear UFO belegt {{Key press|Space}} selbst, sodass du nicht Funken kannst. Als workaround kannst du die COMBar benutzen, die mit dem FGFS Addon mitkommt.&lt;br /&gt;
* FGFS version &amp;lt;= 2020.3 ist nicht mit FGCom-mumble addon version &amp;gt;= 1.3.0 kompatibel. Es wird 1.2.0 benötigt, oder ein FGFS upgrade.&lt;br /&gt;
* FGExtend wechselt dich in mumble in einen anderen Channel, wenn du die Frequenz änderst. Wenn du FGCom-mumble benutzen möchtest, musst du FGExtend ausschalten.&lt;br /&gt;
* Mumble muss als nativer client laufen. Snap packs / flatpak Installationen können das Plugin nicht installieren.&lt;br /&gt;
&lt;br /&gt;
== RadioGUI ==&lt;br /&gt;
Die RadioGUI ist eine kleine Java8 Applikation, die einen FGCom-mumble client implementiert und Funkgeräte bereitstellt. Sie sendet die notwendigen UDP Nachrichten an das Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
In der GUI kannst du deinen Standort über eine Karte auswählen und dann deine Funkgeräte einstellen und testen.&lt;br /&gt;
Damit kannst du auch komplett mit allen Funktionen am simulierten Funknetz teilnehmen, ohne FlightGear zu starten.&lt;br /&gt;
&lt;br /&gt;
== Serverseite ==&lt;br /&gt;
Konzeptionell benötigst du als Minimum einfach einen Standard Mumbleserver (Version 1.4.0 oder höher), auf dem ein Channel eingerichtet wird, der mit `fgcom-mumble` beginnt. Das ist bereits genug, damit das Plugin Clientseitig den Rest erledigen kann. Der komplette Channel wird als einzelnes, weltumspannendes, kontinuierliches Radiowellenspektrum behandelt.&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen werden über Lua-Bots implementiert (die auch auf einer anderen Maschine laufen können):&lt;br /&gt;
* ATIS Aufzeichnung udn Wiedergabe&lt;br /&gt;
* Radioprogramm Wiedergabe (OGG Wiedergabe auf einer beliebigen Funkfrequenz), z.B. nutzbar für eigene NDBs mit Morsecode ([https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons])&lt;br /&gt;
* Statusseite Datensammlung&lt;br /&gt;
&lt;br /&gt;
Eine Statusseite fürs WWW ist als PHP-Seite implementiert, die die notwendigen Daten über den `fgcom-status-bot` bereitgestellt bekommt.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Installations- und Betriebsdokumentation ist in den Veröffentlichungen enthalten, aber auch [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server-de_DE.md online] im Projekt zugänglich.&lt;br /&gt;
&lt;br /&gt;
== Wie funktiooniert das alles? (technische Information) ==&lt;br /&gt;
Die technischen Details sind in den verschiedenen Readme-Dateien im Projekt dargelegt (zum Start empfielt sich [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst treten alle Teilnehmer einem einzigen Mumble-Channel bei und laden das fgcom-mumble Plugin. Das Plugin tauscht alle notwendigen Daten zwischen den Nutzern aus (Funkgeräte, Frequenzen, Standort, etc.) und basierend auf diesen Informationen werden die eingehenden Audioströme der anderen Nutzer entweder abgespielt oder stummgeschaltet. Für mehr Realismus werden abgespielte Audioströme mit Statischem Rauschen und weiteren Effekten unterlegt.&lt;br /&gt;
Aufgrund der Stummschaltefunktion abhängig von der Funkreichweite besteht eine unmittelbare Separierung nach Funkkanal und Standort, was allen Nutzern erlaubt, in ein und demselben Mumblekanal zu sein.&lt;br /&gt;
&lt;br /&gt;
== Weiterführender Inhalt ==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] mit weiteren Tipps/Hinweisen&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md FGCom-mumble README-de_DE.md] Haupt-Readme des Projektes mit allen Details, die du schon immer wissen wolltest&lt;br /&gt;
&lt;br /&gt;
=== Forum topic ===&lt;br /&gt;
* Der {{forum link|t=37644|title=FGCom-mumble}} Forumshtread hat Entwicklungsrelevante Informationen und dient zur allgemeinen Diskussion&lt;br /&gt;
* {{forum link|p=374950|title=Re: EDDF-Triangle}} und {{forum link|p=374970|title=Re: EDDF-Triangle}} - behandeln Details zu Kompatibilität und Unterschieden zwischen FGCom, FGCom-mumble und Mumble&lt;br /&gt;
&lt;br /&gt;
=== FlightGear Newsletter ===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: Erster Prototyp angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Lasttests erfolgreich, RDF implementiert, Live-Status Seite hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: Mehr tests, neue HF/VHF/UHF modelle, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API änderungen, verteilte Installation, Konfigurationsmöglichkeit per INI-Datei, Statistiken&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: Weitere API änderungen, realistische Simulation der 8.33kHz/25kHz Kanalüberlappung, RadiGUI hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringt Netzwerkfunktionen&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF Implementierung umgebaut, 0.12.0 angekündigt, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Bessere Unterstützung von Airliners, 0.13.0 and 0.14.0 angekündigt, Releasepaket neustrukturiert&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 angekündigt, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 angekündigt, updater bugfixes Teil II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 veröffentlicht, Mumble 1.4 wurde veröffentlicht'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[en:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=143157</id>
		<title>FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=143157"/>
		<updated>2025-12-04T08:43:41Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Known incompatibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simulates radio communication based on the VoIP software [https://www.mumble.info/ Mumble]. It integrates fully with the radio stack of your FlightGear plane, allowing you to communicate with other pilots and airspace controllers during your flight. It simulates a global, continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble is an alternative to the already known [[FGCom]] client and [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend].&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble leverages the plugin mechanism introduced by Mumble 1.4.0 and just needs a precompiled plugin loaded by a stock Mumble client.&lt;br /&gt;
You can download the latest release from https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Servers ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
*The main FGCom-mumble test server is &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
*The status page for that service showing all connected clients is at: https://fgcom-dev.hallinger.org/&lt;br /&gt;
*The mumble test server uses a autorenewed certificate from letsencrypt.&lt;br /&gt;
&lt;br /&gt;
==Project main goals==&lt;br /&gt;
*Provide communication with geographic and channel separation&lt;br /&gt;
*Provide a realistic radio simulation&lt;br /&gt;
*Ease of use for the end user/pilot&lt;br /&gt;
*Arbitrary frequency support&lt;br /&gt;
*ATIS recording and playback&lt;br /&gt;
*Radio station broadcast support&lt;br /&gt;
*Landline/Intercom support&lt;br /&gt;
*RDF detection for clients&lt;br /&gt;
*Ease of server side installation and operation&lt;br /&gt;
*Standalone nature (no dependency on FlightGear)&lt;br /&gt;
* Capability to be integrated into FlightGear, with the option to support third party applications (ATC, but also other flight simulators)&lt;br /&gt;
*Modularity, so individual component implementations can be switched and its easy to add features&lt;br /&gt;
*Good and complete documentation&lt;br /&gt;
&lt;br /&gt;
== Installation and setup==&lt;br /&gt;
The latest release can be fetched from [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] also has debug versions).&lt;br /&gt;
&lt;br /&gt;
The provided [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#install--setup-for-the-client README] has detailed instructions on the needed prerequisites and installation procedures.&lt;br /&gt;
&lt;br /&gt;
Someone even made an install video :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
(thanks mate, well done! however HF is actually simulated already :)&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
* Have a stock Mumble client &amp;gt;= 1.4 running, and load the plugin (mumble settings/plugins page)&lt;br /&gt;
* Join a channel named `fgcom-mumble` (on a &amp;gt;= 1.4 mumble server)&lt;br /&gt;
* Add the `fgfs-addon` folder of the client release as FlightGear Addon in your launcher&lt;br /&gt;
* Start FlightGear and use your plane's radio stack (it uses default FGCom buttons, see below)&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
FlightGear's FGCom-mumble protocol uses the default FGCom buttons:&lt;br /&gt;
* When you want to talk on COM1 you have to press {{Key press|Space}}. While transmitting you can not hear other pilots trough the used radio (they are half-duplex).&lt;br /&gt;
* You can also talk on COM2 by pressing {{Key press|Shift|Space}}.&lt;br /&gt;
* since FGCom-mumble 1.2.0:&lt;br /&gt;
** For COM3 you use {{Key press|Alt|Space}} (previously you need to define a custom keybind),&lt;br /&gt;
** Intercom is available in full-duplex with {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Any radio can also accessed by the COMBar (open from ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
If you want to try it out without FlightGear, you can also start the supplied RadioGUI.&lt;br /&gt;
&lt;br /&gt;
=== How to test your setup?===&lt;br /&gt;
First, make sure Mumble is working reliably by talking to other people. Either disable the plugin, or be sure you are outside any radio channel (starting with `fgcom-mumble`).&lt;br /&gt;
&lt;br /&gt;
The plugin alters Mumble's receiving audio stream. It adds static noise depending on the radio signal quality, or cancels out all audio when not in range. The outgoing audio stream is not altered in any way.&lt;br /&gt;
&lt;br /&gt;
If the server supports it (in essence there is a bot-manager running and a `fgcom-recorder-bot` listening) you may do a traditional echo test by tuning `910.00` and start to talk. The recorder-bot will record that (he writes that into mumbles chat) and spawn an echo bot at your position, replaying your message (so you will hear yourself like others will hear you).&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
For troubleshooting, refer to the projects [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#troubleshooting README] as it has further suggestions.&lt;br /&gt;
&lt;br /&gt;
If it's nothing setup related, an easy fix is to just restart mumble (the plugin will reinitialize itself).&lt;br /&gt;
&lt;br /&gt;
===Compatibility ===&lt;br /&gt;
FGCom-mumble supports the legacy FGCom UDP protocol and thus should be compatible to clients supporting that. However, it also features some new UDP fields.&lt;br /&gt;
&lt;br /&gt;
*FlightGear is supported through an [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon]. This assumes the default radio implementation and works with at least the C172P and the C182S.&lt;br /&gt;
*[[ATC-pie]] has built in support already (be sure to activate &amp;quot;FGCom-mumble&amp;quot; instead of just &amp;quot;FGCom&amp;quot; in the settings).&lt;br /&gt;
*[[OpenRadar]] currently supports just COM1 ([https://sourceforge.net/p/openradar/tickets/5/ ticket pending]). To use COM2 and more, you need to either start several mumble instances, or use FGCom-mumble's RadioGUI.&lt;br /&gt;
:There is a patched version of OpenRadar with FGCom-mumble and  8.33 channel tuning support available here: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
====Known incompatibilities====&lt;br /&gt;
* The legacy FGCom auto-enables itself, if you are connected to a multiplayer server and then open the &amp;quot;FGCom&amp;quot; dialog (instead of the &amp;quot;FGCom-mumble&amp;quot; one) from the multiplayer dialog. Then activating PTT can cause a FlightGear segfault (newer FGCom-mumble addon versions have a workaround). &lt;br /&gt;
* The UFO aircraft rebinds {{Key press|Space}} so you can't transmit on the radio. As a workaround you can use the COMBar that comes integrated with the FGFS addon.&lt;br /&gt;
* FGFS version &amp;lt;= 2020.3 is not compatible with FGCom-mumble addon versions &amp;gt;= 1.3.0. You need to stick to 1.2.0 or upgrade FGFS.&lt;br /&gt;
* FGExtend switches you out of channels upon frequency change. You need to disable FGExtend when using FGCom-mumble.&lt;br /&gt;
* Mumble must be a native client. Snap packs / flatpack installation will not work, as the container won't support installing the plugin.&lt;br /&gt;
&lt;br /&gt;
==RadioGUI==&lt;br /&gt;
The FGCom-mumble RadioGUI is a small Java 8 application that can send the FGCom-mumble UDP messages to the Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
Inside the GUI, you can pick your location from a map and then setup and use your radio stack.&lt;br /&gt;
That said, the RadiGUI can be used instead (or additionally to) FGFS to participate on the simulated radio net.&lt;br /&gt;
&lt;br /&gt;
==Server side==&lt;br /&gt;
By design, all that is needed is a standard Murmur server (version 1.4.0 or later) and a specially named channel (it has to start with `fgcom-mumble`). This is enough to let the plugin do its work. The entire channel is treated as a single, worldwide continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
Additional features are implemented using server side Lua bots (which may run somewhere else):&lt;br /&gt;
* ATIS recording and broadcasting&lt;br /&gt;
* Radio program broadcasting (OGG playback on a frequency), [https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons] &lt;br /&gt;
* Status page data collection&lt;br /&gt;
&lt;br /&gt;
A status page showing client details is available as a PHP website, that gets its data fed from the fgcom-status-bot.&lt;br /&gt;
&lt;br /&gt;
Detailed installation and operation documentation is shipped with the releases, but is also [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server.md online].&lt;br /&gt;
&lt;br /&gt;
==How does it work? (technical information)==&lt;br /&gt;
The technical details are specified and described in the various readme files of the projects source code (as a starter read the [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Basicly, all users join the same mumble channel and run the fgcom-mumble plugin. The plugin knows everything necessary from the participating users (like radios used, frequencies tuned, locations, etc) and based on that information mutes or plays incoming voice messages from the other users. Based on signal quality, static noise is mixed in for more fun and a more realistic experience.&lt;br /&gt;
Because the voice of other users is muted, it is a design wise out-of-the-box feature that brings frequency and location separation but allows everyone to stay in the same mumble channel.&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] with hints etc&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README.md FGCom-mumble README.md] Main readme of the project bringing all the details you always wanted to know&lt;br /&gt;
&lt;br /&gt;
===Forum topic===&lt;br /&gt;
*The {{forum link|t=37644|title=FGCom-mumble}} has development discussions and release announcements&lt;br /&gt;
*{{forum link|p=374950|title=Re: EDDF-Triangle}} and  {{forum link|p=374970|title=Re: EDDF-Triangle}} - Compatibility and differences between FGCom, FGCom-mumble and Mumble&lt;br /&gt;
&lt;br /&gt;
===FlightGear Newsletter===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: First prototype announced&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Load tests successful, RDF implemented, Live-Status page added&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: More testing, new HF/VHF/UHF models, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API changes, distributed deployment, configuration trough INI, statistics&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: More API changes, proper 8.33kHz/25kHz overlap, RadiGUI added&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server announced&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringing networking capability&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF reworked, 0.12.0 announced, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Better airliner support, announced 0.13.0 and 0.14.0, restructured release package structure&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 announced, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 announced, updater bugfixes part II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 released, Mumble 1.4 hit the light'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea to integrate into FGFS ==&lt;br /&gt;
{{progressbar|10|10}} {{pending}}&lt;br /&gt;
&lt;br /&gt;
EDIT: Core ticket: https://gitlab.com/flightgear/flightgear/-/issues/3095&lt;br /&gt;
&lt;br /&gt;
ML Discussion: https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1919A28D-44D8-46F0-8A65-A5633A8AB743%40hallinger.org/#msg58717212&lt;br /&gt;
&lt;br /&gt;
Using [https://github.com/mumble-voip/libmumble libmumble], a standalone mumble c++17 library, we could integrate FGCom-mumble directly into FlightGear. This way, FGFS would talk &amp;quot;mumble&amp;quot; to a mumble server and the plugins functions would be integrated into the core. For pilots, a simple &amp;quot;click&amp;quot; to connect in the multiplayer would be enough to participate, while having all the advanced features of fgcom-mumble available (like custom NDBs, radio stations; as well as the possibility for other clients (ATC!) to participate easily on the radio spectrum).&lt;br /&gt;
&lt;br /&gt;
A main idea is also to use the existing fgcom-mumble code to avoid double work. But otoh maybe a direct rewrite of the core stuff may be cleaner; most of the magic is in the fgcom-mumble radio model code anyway, so we might just use some bits, if that is possible?&lt;br /&gt;
&lt;br /&gt;
libmubmble is not yet API-stable (but should be working), but there was already a [https://github.com/mumble-voip/libmumble/issues/18 first dicussion] about feasability and basic mechanics:&lt;br /&gt;
* From FGCom-mumbles side, we need to integrate the data structures into the core. So radios need to be registered, etc. This should not be too hard&lt;br /&gt;
** we probably just need to not run the UPD-Server but send the needed data directly into the decoding function of it. At a later stage, we might better integrate that part, but for a first working solution, just creatig a FCGOM-mumble UDP-Packet string in FGFS and sending it periodically (or already on-demand?) into the udp-servers decoder function should be enough - it just creates some CPU overhead which should not be too bad and will establish the needed local data structure.&lt;br /&gt;
** Note, that we cannot rely on the mpservers data structures (even if there is radio data), because in FGCom-mumble potential other clients are also participating (like radio-playback bots for ATIS etc!). So we really need to use mumbles plugin messages.&lt;br /&gt;
* Basicly the libmumble will run its own threads for networking. Upon receiving mumble audio or mumble-plugin data, callback functions would be called from the lib (https://github.com/mumble-voip/libmumble/issues/18#issuecomment-1868498537):&lt;br /&gt;
** Incoming audio data need to be processed by the fgcom-mumble plugin functions, and then the result handed over into fgfs audio out handling.&lt;br /&gt;
** Incoming plugin data needs to be fed into the fgcom-mumble internal remote data struct (just hand the data into the existing data parser).&lt;br /&gt;
* Pressing the already existing fgfs PTT button&lt;br /&gt;
** would need to send plugin data to mumble, to inform other clients. This is currently done by calling a mumble client function. It would probably be enough, if fgfs core supplied an implemention that calls the appropriate libmumble function and hands over the data.&lt;br /&gt;
** also, the audio data needs to be fetched from the mic, and then handed over to libmumbles audio encoding and sending routine. This probably can somewhat be partly copied from the legacy fgcom implementation.&lt;br /&gt;
* Questions regarding fgfs currently are:&lt;br /&gt;
** {{tick}} (''Answer:'' use [[Howto:Create_new_subsystems|Subsystem]]) how to exactly the integration on fgfs side works. That needs peeks on fgcoms code as well as some discussion at the mailing list.&lt;br /&gt;
** how to integrate the libmubmle code into the fgfs build chain (its cmake).&lt;br /&gt;
*** {{tick}} legally: libmubmle has a [https://github.com/mumble-voip/libmumble/blob/master/LICENSE BSD 3-clause] licence, is that compatible?&lt;br /&gt;
*** {{tick}} And what about libmubmles dependencies, like OpenSSL?&lt;br /&gt;
*** technically, how to include that all into the existing build system?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[de:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=ATC-pie&amp;diff=142943</id>
		<title>ATC-pie</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=ATC-pie&amp;diff=142943"/>
		<updated>2025-11-14T09:42:23Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{forum|83|ATC-Pie support &amp;amp; development}}&lt;br /&gt;
&lt;br /&gt;
{{about|the software and its features|help with installation or configuration|ATC-pie installation guide|a manual on how to use it|ATC-pie user guide}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
| title                  = ATC-pie&lt;br /&gt;
| logo                   = ATC-pie-logo.png&lt;br /&gt;
| image                  = ATC-pie-screenshot-towerViewing.png&lt;br /&gt;
| alt                    = Tower viewing, following a departing aircraft&lt;br /&gt;
| developedby            = Michael Filhol&lt;br /&gt;
| initialrelease         = February 1, 2015&lt;br /&gt;
| latestrelease          = 1.9.1 (March 25, 2025)&lt;br /&gt;
| writtenin              = Python&lt;br /&gt;
| writteninversion       = 3&lt;br /&gt;
| os                     = Any&lt;br /&gt;
| platform               = Qt5&lt;br /&gt;
| developmentstatus      = Active&lt;br /&gt;
| type                   = ATC client&lt;br /&gt;
| license                = GNU GPL v3&lt;br /&gt;
| website                = http://mickybadia.free.fr/atcpie&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''ATC-pie''' is a free (libre) [[air traffic control]] simulation program with strong ties to [[FlightGear]]. It features:&lt;br /&gt;
* solo sessions with AI traffic (incl. voice instruction recognition and pilot read-back);&lt;br /&gt;
* &amp;quot;multi-player&amp;quot; network sessions (FlightGear and FSD protocols supported);&lt;br /&gt;
* tutorial sessions for teacher supervision of an ATC student.&lt;br /&gt;
&lt;br /&gt;
It is designed to support a maximum range of ATC situations, and will allow any world location for every session type above. All control positions are possible, whether airport-based (TWR, APP, GND...) or en-route (CTR). Equipment can be set up to include radar screens, data link, etc. or be limited to binoculars and a view of the airfield.&lt;br /&gt;
&lt;br /&gt;
Its essential goal is realism. It simulates many tasks of real-life ATC such as:&lt;br /&gt;
* strip racks and sequence management;&lt;br /&gt;
* coordination with neighbouring controllers (phone calls, handovers...);&lt;br /&gt;
* radar monitoring for traffic identification and sequencing;&lt;br /&gt;
* vectoring and course/level conflict anticipation;&lt;br /&gt;
* flight plan operations;&lt;br /&gt;
* CPDLC...&lt;br /&gt;
&lt;br /&gt;
Development is on GitLab: https://gitlab.com/atc-pie/atc-pie&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
ATC-pie-screenshot-sectorView.png|Sector view around Geneva&lt;br /&gt;
ATC-pie-screenshot-soloMode.png|Solo session with three coloured racks&lt;br /&gt;
ATC-pie-screenshot-backgroundPixmapDrawing.png|Background image display&lt;br /&gt;
ATC-pie-screenshot-airportCloseUp.png|Depiction of airport tarmac and objects&lt;br /&gt;
ATC-pie-screenshot-runwayIncursion.png|Runway incursion detected and highlighted in red&lt;br /&gt;
ATC-pie-screenshot-flightPlans.png|Flight plan editor&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visit the [[:Category:ATC-pie screenshots|ATC-pie screenshot category]] for more.&lt;br /&gt;
&lt;br /&gt;
== Sessions and environments ==&lt;br /&gt;
&lt;br /&gt;
ATC-pie features five session/connection types, all of which support both ''airport'' and ''centre'' location modes. &lt;br /&gt;
&lt;br /&gt;
Session types:&lt;br /&gt;
* solo simulation (AI traffic)&lt;br /&gt;
* FlightGear network connection ([[FGMS]] protocol)&lt;br /&gt;
* FSD connection (as served by https://github.com/kuroneko/fsd commit bc7d43, latest available in Dec. 2022)&lt;br /&gt;
* teaching service (spawn and simulate traffic visible to a connected student)&lt;br /&gt;
* student session (control traffic simulated by teacher)&lt;br /&gt;
&lt;br /&gt;
Location modes:&lt;br /&gt;
* airport (AD): positions such as TWR, GND, APP, DEP at a selected airfield&lt;br /&gt;
* en-route centre (CTR): free positioning of radar, no base airport or TKOF/LDG-related options&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Feature support by session type&lt;br /&gt;
! || Solo || FlightGear || FSD || Tutoring (teacher/student)&lt;br /&gt;
|-&lt;br /&gt;
! ACFT traffic&lt;br /&gt;
| AI aircraft generated according to RWY capacities, ACFT equipment, intentions...&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | connected flight sim pilots&lt;br /&gt;
| created and simulated by teacher&lt;br /&gt;
|-&lt;br /&gt;
! ATCs and coordination&lt;br /&gt;
| virtual ATCs depending on assumed positions&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | connected ATC clients (full ATC-pie interaction, [[#Interoperability with other software|interoperability with other software]])&lt;br /&gt;
| teacher-configured ATCs&lt;br /&gt;
|-&lt;br /&gt;
! Voice radio&lt;br /&gt;
| voice recognition for instructions (mouse-only also available) and synthesis for pilot read-back&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | [[FGCom-mumble]] integration&lt;br /&gt;
| teacher simulates pilots&lt;br /&gt;
|-&lt;br /&gt;
! ATC phone lines&lt;br /&gt;
| N/A&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | integrated Mumble connection&lt;br /&gt;
| teacher simulates ATCs&lt;br /&gt;
|-&lt;br /&gt;
! Flight plans&lt;br /&gt;
| local entries only&lt;br /&gt;
| interface with the FlightGear ''de facto'' [http://flightgear-atc.alwaysdata.net data base by Lenny64]&lt;br /&gt;
| available from network (NB: protocol does not support open/close and only pilots can file/amend FPLs)&lt;br /&gt;
| shared virtual online system&lt;br /&gt;
|-&lt;br /&gt;
! CPDLC&lt;br /&gt;
| interpreted subset of instruction messages&lt;br /&gt;
| integrated (supported by MP IRC)&lt;br /&gt;
| integrated interface with [https://www.hoppie.nl/acars/ Hoppie's ACARS network]&lt;br /&gt;
| full simulation by teacher (with WILCO assistance to execute instructions)&lt;br /&gt;
|-&lt;br /&gt;
! Weather&lt;br /&gt;
| randomised and evolving&lt;br /&gt;
| real world METAR retrieval&lt;br /&gt;
| fetch from server or retrieve real world METAR&lt;br /&gt;
| controlled by teacher&lt;br /&gt;
|-&lt;br /&gt;
! Other specific features&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; |&lt;br /&gt;
* aircraft type and airline choice with custom appearence in tower view&lt;br /&gt;
* configurable airspace rules and traffic density, incl. uncontrolled distractors&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; |&lt;br /&gt;
* exact aircraft rendering in views (incl. control surfaces, etc.)&lt;br /&gt;
* historic [[FGCom_3.0|FGCom executable]] alternative supported&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; |&lt;br /&gt;
* frequency tuning system for radio text chat&lt;br /&gt;
* text ATIS repeatedly sent through radio chat on recorded frequency&lt;br /&gt;
| style=&amp;quot;text-align:left&amp;quot; |&lt;br /&gt;
* traffic snapshots and recall to repeat situations with the student&lt;br /&gt;
* individual aircraft freeze&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed feature list ==&lt;br /&gt;
&lt;br /&gt;
=== ATC surveillance ===&lt;br /&gt;
Radars and tracking:&lt;br /&gt;
* SSR mode capability selection (none/A/C/S)&lt;br /&gt;
* primary radar toggle&lt;br /&gt;
* traffic identification assistant&lt;br /&gt;
* position/track vs. strip assignment mismatch warning system&lt;br /&gt;
* route/vector conflict anticipation&lt;br /&gt;
* separation incident alarm&lt;br /&gt;
* runway occupation/incursion detection&lt;br /&gt;
&lt;br /&gt;
Tower view in airport mode (rendered by FlightGear):&lt;br /&gt;
* view of airport, aircraft, weather, time of day&lt;br /&gt;
* start internal process or use externally running instance&lt;br /&gt;
* control panel to orient/zoom view or follow aircraft&lt;br /&gt;
* additional views can be connected (for multiple camera angles)&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* radio direction finding (RDF) and integration to radar&lt;br /&gt;
* multiple weather (METAR) station monitor&lt;br /&gt;
* [[ATIS]] recording and reminder alarm (see [[:File:ATC-pie-screenshot-ATISdialog.png|dialog]] with pre-filled notepad)&lt;br /&gt;
&lt;br /&gt;
=== Traffic management ===&lt;br /&gt;
Strips and racks:&lt;br /&gt;
* user-defined strip racks with configurable colours (for linked radar contacts) and ATCs to receive from&lt;br /&gt;
* runway boxes with automatic RWY separation timers&lt;br /&gt;
* loose strip bays with customisable backgrounds&lt;br /&gt;
&lt;br /&gt;
Flight plans and routes:&lt;br /&gt;
* flight plan system (file, edit, open, close, publish/retrieve online)&lt;br /&gt;
* world route suggestions, presets, analysis, radar drawing and world map view&lt;br /&gt;
* departure clearance assistant&lt;br /&gt;
* automatic strip printing for expected departures or arrivals (from FPLs)&lt;br /&gt;
&lt;br /&gt;
Radar tools:&lt;br /&gt;
* convenient mouse input for instructions (vectors, taxi...) and CPDLC integration&lt;br /&gt;
* approach spacing hints (estimated touch-down time difference, sequence optimisation suggestions)&lt;br /&gt;
* quick point-to-point heading and distance measuring tool&lt;br /&gt;
* direct text annotation of radar screen&lt;br /&gt;
* flag/unflag (highlight) radar targets&lt;br /&gt;
&lt;br /&gt;
=== Communications ===&lt;br /&gt;
With aircraft:&lt;br /&gt;
* voice radio with 8.33 kHz frequency spacing, multiple radio transmissions and monitoring&lt;br /&gt;
* [[controller-pilot data link communication]] (CPDLC), incl. DEP clearance delivery, multi-element messages...&lt;br /&gt;
* text radio chat with preset messages, auto-completion, predefined and custom aliases (context-sensitive replacements), sender blacklist&lt;br /&gt;
&lt;br /&gt;
ATC coordination:&lt;br /&gt;
* strip exchange (handovers)&lt;br /&gt;
* CPDLC authority transfers&lt;br /&gt;
* telephone lines and switchboard (direct voice communication)&lt;br /&gt;
* text messaging (private channels and general ATC chat room)&lt;br /&gt;
* &amp;quot;who has?&amp;quot; requests&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
Misc. tools:&lt;br /&gt;
* world airport, map navpoint and AD parking position browsing/indicating&lt;br /&gt;
* aeronautical unit conversion calculator&lt;br /&gt;
* custom alarm clocks with quick keyboard timer start&lt;br /&gt;
* general and location-specific notepads restored between sessions&lt;br /&gt;
* list of known ACFT types by callsign&lt;br /&gt;
&lt;br /&gt;
GUI:&lt;br /&gt;
* multiple window workspace (radar screens, strip racks and bays) saved by location&lt;br /&gt;
* floatable/dockable panels and toolbars (see [[:File:ATC-pie-screenshot-toolbars.png|screenshot]]) and layout save/restore&lt;br /&gt;
* notification system combining selectable sounds, status bar messages and time-tagged history&lt;br /&gt;
* customisable style and colours&lt;br /&gt;
&lt;br /&gt;
Data sources:&lt;br /&gt;
* airport and navigation data sourced in the [http://developer.x-plane.com/docs/specs X-Plane] format (old world-wide default file set provided but custom imports recommended)&lt;br /&gt;
* editable aircraft data base (ICAO designators, cruise speeds, WTC, etc.)&lt;br /&gt;
* custom radar background images and hand drawings (EuroScope/[http://www.vatsim.net VATSIM]/IVAO &amp;quot;sector file&amp;quot; conversion tool included)&lt;br /&gt;
* ground elevation maps (can be generated automatically with a provided script if FlightGear terrain data available)&lt;br /&gt;
* manual magnetic declination input&lt;br /&gt;
&lt;br /&gt;
== Interoperability with other software ==&lt;br /&gt;
&lt;br /&gt;
=== OpenRadar ===&lt;br /&gt;
[[OpenRadar]] is another stand-alone program able to connect to FlightGear networks. ATC-pie and OpenRadar's philosophies differ in several ways:&lt;br /&gt;
* OpenRadar's basic processing unit is the FGMS callsign, whereas ATC-pie's is the strip;&lt;br /&gt;
* OpenRadar's concept of handover is based on a shared notion of aircraft ownership, whereas ATC-pie allows any controller to pull out a strip and write a callsign on it;&lt;br /&gt;
* in OpenRadar, a handover must be acknowledged by the receiver for the sender to lose ownership and for all neighbouring users to see it complete, whereas ATC-pie considers that a strip sent is gone and assumed to land on the receiver's rack, without anybody else necessarily to know.&lt;br /&gt;
&lt;br /&gt;
For most interactions to work in FlightGear sessions while respecting both approaches as much as possible, the following principles and restrictions apply to strip exchange between the two programs:&lt;br /&gt;
* ATC-pie users can only hand over strips to OpenRadar that are linked to a radar contact;&lt;br /&gt;
* aircraft under ATC-pie control are not shown as &amp;quot;owned&amp;quot; to OpenRadar users;&lt;br /&gt;
* handovers from ATC-pie will fail if an OpenRadar user is claiming ownership on the linked radar contact;&lt;br /&gt;
* when sending to ATC-pie controllers, OpenRadar users will see their transfers acknowledged straight away, unconditionally.&lt;br /&gt;
&lt;br /&gt;
Callsign handover policy:&lt;br /&gt;
* OpenRadar to ATC-pie: FGMS callsign will appear on the strip, as if the sender had filled the detail herself;&lt;br /&gt;
* ATC-pie to OpenRadar: callsign resolved for the receiver, sender's entry will reappear next time ATC-pie handles the strip;&lt;br /&gt;
* pie-to-pie handovers through OpenRadar's service: strip detail preserved, whether present or absent.&lt;br /&gt;
&lt;br /&gt;
Features not supported by OpenRadar:&lt;br /&gt;
* ATC phone lines;&lt;br /&gt;
* ATC text messaging;&lt;br /&gt;
* CPDLC transfers;&lt;br /&gt;
* wake turbulance category and departure clearances on strips (but details preserved for ATC-pie clients later receiving the strip).&lt;br /&gt;
&lt;br /&gt;
Who-has requests are fully supported.&lt;br /&gt;
&lt;br /&gt;
=== Euroscope ===&lt;br /&gt;
Euroscope is a popular program to control on VATSIM, a flight simulation network whose protocol is historically based on FSD. It has been increasingly tailored for VATSIM, although for a long time it allowed also to connect to &amp;quot;plain&amp;quot; (non-VATSIM) FSD servers. Operability outside of VATSIM is now discontinued all together, but older versions of Euroscope are still around and connecting to FSD networks. ATC-pie is able to interact with them in FSD sessions, but only to a limited extent:&lt;br /&gt;
* sending a strip to Euroscope will result in a loss of all strip details but the callsign (which must be connected), the only information left to the recipient being the FPL details for that callsign if any (strip changes made after FPL data retrieval are therefore lost);&lt;br /&gt;
* receiving a strip from Euroscope is supported, but the sender will see the hondover pending (never &amp;quot;assumed&amp;quot;);&lt;br /&gt;
* who-has requests will remain unanswered by Euroscope;&lt;br /&gt;
* there are no integrated phone lines to Euroscope clients.&lt;br /&gt;
&lt;br /&gt;
[[Category:ATC-pie]]&lt;br /&gt;
[[Category:ATC clients]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Schleicher_ASK_13&amp;diff=142912</id>
		<title>Schleicher ASK 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Schleicher_ASK_13&amp;diff=142912"/>
		<updated>2025-11-12T09:05:06Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{:{{PAGENAME}}/info}}&lt;br /&gt;
The '''Schleichter ASK 13''' is a two-seater [[Gliders|glider]] that was built by Alexander Schleicher. It was and still is widely used for ab-initio training of glider pilots.&lt;br /&gt;
&lt;br /&gt;
You can find more details about this awesome aircraft [http://en.wikipedia.org/wiki/Schleicher_ASK_13 at Wikipedia].&lt;br /&gt;
&lt;br /&gt;
The [[FlightGear]] model of the ASK-13 comes with a basic [[dual control]] support. So far this is only a passive passenger view, but yet an instructor can be with his student and help newcomers to discover the joys of soaring by real time piloting advices.&lt;br /&gt;
&lt;br /&gt;
== Development status/Issues/Todo ==&lt;br /&gt;
Outside:&lt;br /&gt;
&lt;br /&gt;
* texturing is very basic&lt;br /&gt;
&lt;br /&gt;
General:&lt;br /&gt;
&lt;br /&gt;
* Dual Control is now limited to a simple , passive passenger view.&lt;br /&gt;
* Passenger view has a very limited audio support.&lt;br /&gt;
* FDM is relatively accurate, but could be fine tuned. Testers are welcome !&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
* [[Howto: Do aerotow over the net]]&lt;br /&gt;
* [[Soaring]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{Wikipedia|Schleicher ASK 13 |lang=en}}&lt;br /&gt;
* POH https://www.psgc.co.uk/pdf/ask13_flight_manual.pdf&lt;br /&gt;
&lt;br /&gt;
{{Schleicher}}&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=142888</id>
		<title>De/FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=142888"/>
		<updated>2025-11-07T09:32:05Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Bekannte Inkompatibilitäten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simuliert Funkkommunikation basierend auf der freien VoIP software [https://www.mumble.info/ Mumble]. Es integriert sich vollstädnig mit den Funkgeräten deines Flugzeuges in FlightGear und erlaubt dir, mit anderen Piloten und Fluglotsen auf realistische Weise zu kommunizieren. Dafür simuliert es ein lückenloses Radiowellenspektrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble ist eine Alternative zum altbekannten [[FGCom]] sowie [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend]. &lt;br /&gt;
&lt;br /&gt;
FGCom-mumble nutzt den Pluginmechanismus, der in Mumble 1.4.0 verfügbar wurde und benötigt lediglich ein vorkompiliertes Plugin, das von einem ganz normalen Mumble-Programm geladen wird. Das aktuellste Release kannst du hier herunterladen: https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Server ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
* Der FGCom-mumble test server ist &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Statusseite für diese Instanz, die alle verbundenen Clients anzeigt, ist hier: https://fgcom-dev.hallinger.org/&lt;br /&gt;
* Der mumble-testserver benutzt ein autoerneuerndes SSL-Zertifikat von Lets Encrypt.&lt;br /&gt;
&lt;br /&gt;
== Hauptziele des Projektes ==&lt;br /&gt;
* Bereitstellen von Kommunikation, die sowohl örtlich als auch kanaltechnisch getrennt ist&lt;br /&gt;
* Realistische Funkkommunikation&lt;br /&gt;
* Einfachheit in der Installation und Benutzung&lt;br /&gt;
* Unterstützung für beliebige Frequenzen&lt;br /&gt;
* ATIS Aufnahme und Wiedergabe&lt;br /&gt;
* Zivile Radiostationen sollen unterstützt werden&lt;br /&gt;
* Festnetz/Intercom Unterstützung&lt;br /&gt;
* RDF-Signale für Clients&lt;br /&gt;
* Einfach auf einem Server zu installieren und zu betreieben&lt;br /&gt;
* Unabhängigkeit von Simulatoren wie z.B. Flightgear&lt;br /&gt;
* Fähigkeit, in FlightGear integriert zu werden, mit der Option, weitere Clients und Applikationen zu unterstützen (ATC, aber auch andere Flugsimulatoren)&lt;br /&gt;
* Modularer Aufbau, damit einzelne Komponenten unterschiedlich implementiert werden können und einfache Erweiterbarkeit besteht&lt;br /&gt;
* Gute und vollständige Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Installation and Einrichtung ==&lt;br /&gt;
Die aktuelle Version kann hier heruntergeladen werden: [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] bietet auch eine Debug-Variante an).&lt;br /&gt;
&lt;br /&gt;
Die  [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#installation--einrichtung-des-mumble-plugins README] bietet detaillierte Angaben zur Installation.&lt;br /&gt;
&lt;br /&gt;
Jemand hat sogar ein Video (engl.) von der Installation gemacht! :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* Du brauchst ein installiertes und eingerichtetes Mumble &amp;gt;= 1.4, und dann lade darin das Plugin (unter mumble Einstellungen/plugins)&lt;br /&gt;
* Auf dem Mumbleserver (Version &amp;gt;= 1.4.0) trittst du einem Channel bei, dessen Name mit `fgcom-mumble` beginnt&lt;br /&gt;
* Im FlightGear-Launcher fügst du im Addon-Tab den `fgfs-addon` Ordner der FGCom-Mumble Veröffentlichung hinzu&lt;br /&gt;
* Starte FlightGear und benutze deine Funkgeräte (du funkst mit den ganz normalen FGCom-Tastenkombinationen; siehe unten)&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
FlightGear's FGCom-mumble Protokoll benutzt die normalen FGCom-Tastenkombinationen:&lt;br /&gt;
* Um auf COM1 zu funken, drückst du {{Key press|Space}}. Solange du überträgst, kannst du keine anderen Piloten durch das verwendete Funkgerät hören (diese sind Halbduplexgeräte).&lt;br /&gt;
* COM2 sendet mit {{Key press|Shift|Space}}.&lt;br /&gt;
* Seit FGCom-mumble 1.2.0:&lt;br /&gt;
** Mit COM3 funkst du über {{Key press|Alt|Space}} (früher musstest du ein eigenes Keybind definieren),&lt;br /&gt;
** Intercom sendet in full-duplex mit {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Jedes Funkgerät kann außerdem über die COMBar benutzt werden (öffnen über ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
Um FGCom-mumble ohne FlightGear zu probieren, kannst du auch die im Release mitgelieferte RadioGUI starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deine Installation testen ===&lt;br /&gt;
Als erstes solltest du sicherstellen, dass mumble an Sich gut funktioniert und du gut zu verstehen bist sowie andere gut verstehst.&lt;br /&gt;
Dazu deaktivierst du am Besten das Plugin oder du sprichst mit anderen auf einem Channel, der nicht mit `fgcom-mumble`beginnt.&lt;br /&gt;
&lt;br /&gt;
Das Plugin verändert Mumbles eingehende Audiopakete. Es fügt statisches Rauschen hinzu, das von der simulierten Funksignalstärke abhängt oder hebt den stream sogar auf, wenn der Funksender außerhalb der Reichweite liegt. Ausgehende Audiopakete werden nicht verändert.&lt;br /&gt;
&lt;br /&gt;
Falls der Server es unterstützt, kannst du auch einen traditionellen Echo-Test machen (dazu muss am Server ein `fgcom-recorder-bot` laufen). Funke auf der Frequenz `910.00` MHz und der Recorderbot wird mit der Aufzeichnung beginnen (er schreibt das in den mumble-chat) und nach Abschluss einen bot an deiner Position erzeugen, der das aufgenommene auf der Frequenz wiedergibt. So kannst du dich selbst hören, wie andere dich hören würden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebung ===&lt;br /&gt;
&lt;br /&gt;
Schau bitte in die [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#fehlerbehebung README] des Projekts. Diese hat detaillierte Informationen hierzu.&lt;br /&gt;
&lt;br /&gt;
Solange es nichts grundlegendes mit der Installation zu tun hat, hilft oft auch einfach ein Neustart von Mumble (das Plugin initialisiert sich selbständig frisch).&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität ===&lt;br /&gt;
FGCom-mumble unterstützt grundsätzlich das alte FGCom-UDP-Protokoll und sollte somit kompatibel mit allen clients sein, die dieses verwenden (z.B. ältere ATCpie oder OpenRadar Versionen). Allerdings gibt es auch ein paar Erweiterungen, die mit dem alten Protokoll nicht zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
* FlightGear wird durch ein [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon] unterstützt. Dieses erwartet die Standard-Funkgerätimplementierung (und funktioniert getestet zumindest mit der C172p und der C182S).&lt;br /&gt;
*[[ATC-pie]] hat eine integrierte Unterstützung (prüfe, ob &amp;quot;FGCom-mumble&amp;quot; anstelle von nur &amp;quot;FGCom&amp;quot; in den Einstellungen aktiviert ist).&lt;br /&gt;
*[[OpenRadar]] Unterstützt im Moment nur COM1 ([https://sourceforge.net/p/openradar/tickets/5/ Ticket dazu ist offen]). Für COM2 und weitere musst du entweder separate Mumble-Instanzen öffnen oder FGCom-mumble's RadioGUI zum Funken benutzen.&lt;br /&gt;
:Es gibt eine gepatchte Version von OpenRadar mit integriertem FGCom-mumble sowie 8.33 Channelmodus; verfügbar hier: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
==== Bekannte Inkompatibilitäten ====&lt;br /&gt;
* Das alte FGCom aktiviert sich selbständig, wenn du mit dem Mehrspielernetzwerk verbunden bist und dann die &amp;quot;FGCom&amp;quot;-Einstellungen (anstelle des &amp;quot;FGCm-Mumble&amp;quot;-Eintrags) aus dem Mehrspielermenü aufrufst. Wenn du mit aktiviertem alten FGCom PTT aktivierst, kann FlightGear abstürzen (aktuelle FGcom-mumble addons haben einen Workaround dafür).&lt;br /&gt;
* Das FlightGear UFO belegt {{Key press|Space}} selbst, sodass du nicht Funken kannst. Als workaround kannst du die COMBar benutzen, die mit dem FGFS Addon mitkommt.&lt;br /&gt;
* FGFS version &amp;lt;= 2020.3 ist nicht mit FGCom-mumble addon version &amp;gt;= 1.3.0 kompatibel. Es wird 1.2.0 benötigt, oder ein FGFS upgrade.&lt;br /&gt;
* FGExtend wechselt dich in mumble in einen anderen Channel, wenn du die Frequenz änderst. Wenn du FGCom-mumble benutzen möchtest, musst du FGExtend ausschalten.&lt;br /&gt;
&lt;br /&gt;
== RadioGUI ==&lt;br /&gt;
Die RadioGUI ist eine kleine Java8 Applikation, die einen FGCom-mumble client implementiert und Funkgeräte bereitstellt. Sie sendet die notwendigen UDP Nachrichten an das Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
In der GUI kannst du deinen Standort über eine Karte auswählen und dann deine Funkgeräte einstellen und testen.&lt;br /&gt;
Damit kannst du auch komplett mit allen Funktionen am simulierten Funknetz teilnehmen, ohne FlightGear zu starten.&lt;br /&gt;
&lt;br /&gt;
== Serverseite ==&lt;br /&gt;
Konzeptionell benötigst du als Minimum einfach einen Standard Mumbleserver (Version 1.4.0 oder höher), auf dem ein Channel eingerichtet wird, der mit `fgcom-mumble` beginnt. Das ist bereits genug, damit das Plugin Clientseitig den Rest erledigen kann. Der komplette Channel wird als einzelnes, weltumspannendes, kontinuierliches Radiowellenspektrum behandelt.&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen werden über Lua-Bots implementiert (die auch auf einer anderen Maschine laufen können):&lt;br /&gt;
* ATIS Aufzeichnung udn Wiedergabe&lt;br /&gt;
* Radioprogramm Wiedergabe (OGG Wiedergabe auf einer beliebigen Funkfrequenz), z.B. nutzbar für eigene NDBs mit Morsecode ([https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons])&lt;br /&gt;
* Statusseite Datensammlung&lt;br /&gt;
&lt;br /&gt;
Eine Statusseite fürs WWW ist als PHP-Seite implementiert, die die notwendigen Daten über den `fgcom-status-bot` bereitgestellt bekommt.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Installations- und Betriebsdokumentation ist in den Veröffentlichungen enthalten, aber auch [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server-de_DE.md online] im Projekt zugänglich.&lt;br /&gt;
&lt;br /&gt;
== Wie funktiooniert das alles? (technische Information) ==&lt;br /&gt;
Die technischen Details sind in den verschiedenen Readme-Dateien im Projekt dargelegt (zum Start empfielt sich [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst treten alle Teilnehmer einem einzigen Mumble-Channel bei und laden das fgcom-mumble Plugin. Das Plugin tauscht alle notwendigen Daten zwischen den Nutzern aus (Funkgeräte, Frequenzen, Standort, etc.) und basierend auf diesen Informationen werden die eingehenden Audioströme der anderen Nutzer entweder abgespielt oder stummgeschaltet. Für mehr Realismus werden abgespielte Audioströme mit Statischem Rauschen und weiteren Effekten unterlegt.&lt;br /&gt;
Aufgrund der Stummschaltefunktion abhängig von der Funkreichweite besteht eine unmittelbare Separierung nach Funkkanal und Standort, was allen Nutzern erlaubt, in ein und demselben Mumblekanal zu sein.&lt;br /&gt;
&lt;br /&gt;
== Weiterführender Inhalt ==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] mit weiteren Tipps/Hinweisen&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md FGCom-mumble README-de_DE.md] Haupt-Readme des Projektes mit allen Details, die du schon immer wissen wolltest&lt;br /&gt;
&lt;br /&gt;
=== Forum topic ===&lt;br /&gt;
* Der {{forum link|t=37644|title=FGCom-mumble}} Forumshtread hat Entwicklungsrelevante Informationen und dient zur allgemeinen Diskussion&lt;br /&gt;
* {{forum link|p=374950|title=Re: EDDF-Triangle}} und {{forum link|p=374970|title=Re: EDDF-Triangle}} - behandeln Details zu Kompatibilität und Unterschieden zwischen FGCom, FGCom-mumble und Mumble&lt;br /&gt;
&lt;br /&gt;
=== FlightGear Newsletter ===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: Erster Prototyp angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Lasttests erfolgreich, RDF implementiert, Live-Status Seite hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: Mehr tests, neue HF/VHF/UHF modelle, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API änderungen, verteilte Installation, Konfigurationsmöglichkeit per INI-Datei, Statistiken&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: Weitere API änderungen, realistische Simulation der 8.33kHz/25kHz Kanalüberlappung, RadiGUI hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringt Netzwerkfunktionen&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF Implementierung umgebaut, 0.12.0 angekündigt, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Bessere Unterstützung von Airliners, 0.13.0 and 0.14.0 angekündigt, Releasepaket neustrukturiert&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 angekündigt, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 angekündigt, updater bugfixes Teil II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 veröffentlicht, Mumble 1.4 wurde veröffentlicht'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[en:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=142887</id>
		<title>FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=142887"/>
		<updated>2025-11-07T09:30:40Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Known incompatibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simulates radio communication based on the VoIP software [https://www.mumble.info/ Mumble]. It integrates fully with the radio stack of your FlightGear plane, allowing you to communicate with other pilots and airspace controllers during your flight. It simulates a global, continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble is an alternative to the already known [[FGCom]] client and [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend].&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble leverages the plugin mechanism introduced by Mumble 1.4.0 and just needs a precompiled plugin loaded by a stock Mumble client.&lt;br /&gt;
You can download the latest release from https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Servers ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
*The main FGCom-mumble test server is &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
*The status page for that service showing all connected clients is at: https://fgcom-dev.hallinger.org/&lt;br /&gt;
*The mumble test server uses a autorenewed certificate from letsencrypt.&lt;br /&gt;
&lt;br /&gt;
==Project main goals==&lt;br /&gt;
*Provide communication with geographic and channel separation&lt;br /&gt;
*Provide a realistic radio simulation&lt;br /&gt;
*Ease of use for the end user/pilot&lt;br /&gt;
*Arbitrary frequency support&lt;br /&gt;
*ATIS recording and playback&lt;br /&gt;
*Radio station broadcast support&lt;br /&gt;
*Landline/Intercom support&lt;br /&gt;
*RDF detection for clients&lt;br /&gt;
*Ease of server side installation and operation&lt;br /&gt;
*Standalone nature (no dependency on FlightGear)&lt;br /&gt;
* Capability to be integrated into FlightGear, with the option to support third party applications (ATC, but also other flight simulators)&lt;br /&gt;
*Modularity, so individual component implementations can be switched and its easy to add features&lt;br /&gt;
*Good and complete documentation&lt;br /&gt;
&lt;br /&gt;
== Installation and setup==&lt;br /&gt;
The latest release can be fetched from [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] also has debug versions).&lt;br /&gt;
&lt;br /&gt;
The provided [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#install--setup-for-the-client README] has detailed instructions on the needed prerequisites and installation procedures.&lt;br /&gt;
&lt;br /&gt;
Someone even made an install video :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
(thanks mate, well done! however HF is actually simulated already :)&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
* Have a stock Mumble client &amp;gt;= 1.4 running, and load the plugin (mumble settings/plugins page)&lt;br /&gt;
* Join a channel named `fgcom-mumble` (on a &amp;gt;= 1.4 mumble server)&lt;br /&gt;
* Add the `fgfs-addon` folder of the client release as FlightGear Addon in your launcher&lt;br /&gt;
* Start FlightGear and use your plane's radio stack (it uses default FGCom buttons, see below)&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
FlightGear's FGCom-mumble protocol uses the default FGCom buttons:&lt;br /&gt;
* When you want to talk on COM1 you have to press {{Key press|Space}}. While transmitting you can not hear other pilots trough the used radio (they are half-duplex).&lt;br /&gt;
* You can also talk on COM2 by pressing {{Key press|Shift|Space}}.&lt;br /&gt;
* since FGCom-mumble 1.2.0:&lt;br /&gt;
** For COM3 you use {{Key press|Alt|Space}} (previously you need to define a custom keybind),&lt;br /&gt;
** Intercom is available in full-duplex with {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Any radio can also accessed by the COMBar (open from ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
If you want to try it out without FlightGear, you can also start the supplied RadioGUI.&lt;br /&gt;
&lt;br /&gt;
=== How to test your setup?===&lt;br /&gt;
First, make sure Mumble is working reliably by talking to other people. Either disable the plugin, or be sure you are outside any radio channel (starting with `fgcom-mumble`).&lt;br /&gt;
&lt;br /&gt;
The plugin alters Mumble's receiving audio stream. It adds static noise depending on the radio signal quality, or cancels out all audio when not in range. The outgoing audio stream is not altered in any way.&lt;br /&gt;
&lt;br /&gt;
If the server supports it (in essence there is a bot-manager running and a `fgcom-recorder-bot` listening) you may do a traditional echo test by tuning `910.00` and start to talk. The recorder-bot will record that (he writes that into mumbles chat) and spawn an echo bot at your position, replaying your message (so you will hear yourself like others will hear you).&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
For troubleshooting, refer to the projects [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#troubleshooting README] as it has further suggestions.&lt;br /&gt;
&lt;br /&gt;
If it's nothing setup related, an easy fix is to just restart mumble (the plugin will reinitialize itself).&lt;br /&gt;
&lt;br /&gt;
===Compatibility ===&lt;br /&gt;
FGCom-mumble supports the legacy FGCom UDP protocol and thus should be compatible to clients supporting that. However, it also features some new UDP fields.&lt;br /&gt;
&lt;br /&gt;
*FlightGear is supported through an [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon]. This assumes the default radio implementation and works with at least the C172P and the C182S.&lt;br /&gt;
*[[ATC-pie]] has built in support already (be sure to activate &amp;quot;FGCom-mumble&amp;quot; instead of just &amp;quot;FGCom&amp;quot; in the settings).&lt;br /&gt;
*[[OpenRadar]] currently supports just COM1 ([https://sourceforge.net/p/openradar/tickets/5/ ticket pending]). To use COM2 and more, you need to either start several mumble instances, or use FGCom-mumble's RadioGUI.&lt;br /&gt;
:There is a patched version of OpenRadar with FGCom-mumble and  8.33 channel tuning support available here: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
====Known incompatibilities====&lt;br /&gt;
* The legacy FGCom auto-enables itself, if you are connected to a multiplayer server and then open the &amp;quot;FGCom&amp;quot; dialog (instead of the &amp;quot;FGCom-mumble&amp;quot; one) from the multiplayer dialog. Then activating PTT can cause a FlightGear segfault (newer FGCom-mumble addon versions have a workaround). &lt;br /&gt;
* The UFO aircraft rebinds {{Key press|Space}} so you can't transmit on the radio. As a workaround you can use the COMBar that comes integrated with the FGFS addon.&lt;br /&gt;
* FGFS version &amp;lt;= 2020.3 is not compatible with FGCom-mumble addon versions &amp;gt;= 1.3.0. You need to stick to 1.2.0 or upgrade FGFS.&lt;br /&gt;
* FGExtend switches you out of channels upon frequency change. You need to disable FGExtend when using FGCom-mumble.&lt;br /&gt;
&lt;br /&gt;
==RadioGUI==&lt;br /&gt;
The FGCom-mumble RadioGUI is a small Java 8 application that can send the FGCom-mumble UDP messages to the Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
Inside the GUI, you can pick your location from a map and then setup and use your radio stack.&lt;br /&gt;
That said, the RadiGUI can be used instead (or additionally to) FGFS to participate on the simulated radio net.&lt;br /&gt;
&lt;br /&gt;
==Server side==&lt;br /&gt;
By design, all that is needed is a standard Murmur server (version 1.4.0 or later) and a specially named channel (it has to start with `fgcom-mumble`). This is enough to let the plugin do its work. The entire channel is treated as a single, worldwide continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
Additional features are implemented using server side Lua bots (which may run somewhere else):&lt;br /&gt;
* ATIS recording and broadcasting&lt;br /&gt;
* Radio program broadcasting (OGG playback on a frequency), [https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons] &lt;br /&gt;
* Status page data collection&lt;br /&gt;
&lt;br /&gt;
A status page showing client details is available as a PHP website, that gets its data fed from the fgcom-status-bot.&lt;br /&gt;
&lt;br /&gt;
Detailed installation and operation documentation is shipped with the releases, but is also [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server.md online].&lt;br /&gt;
&lt;br /&gt;
==How does it work? (technical information)==&lt;br /&gt;
The technical details are specified and described in the various readme files of the projects source code (as a starter read the [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Basicly, all users join the same mumble channel and run the fgcom-mumble plugin. The plugin knows everything necessary from the participating users (like radios used, frequencies tuned, locations, etc) and based on that information mutes or plays incoming voice messages from the other users. Based on signal quality, static noise is mixed in for more fun and a more realistic experience.&lt;br /&gt;
Because the voice of other users is muted, it is a design wise out-of-the-box feature that brings frequency and location separation but allows everyone to stay in the same mumble channel.&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] with hints etc&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README.md FGCom-mumble README.md] Main readme of the project bringing all the details you always wanted to know&lt;br /&gt;
&lt;br /&gt;
===Forum topic===&lt;br /&gt;
*The {{forum link|t=37644|title=FGCom-mumble}} has development discussions and release announcements&lt;br /&gt;
*{{forum link|p=374950|title=Re: EDDF-Triangle}} and  {{forum link|p=374970|title=Re: EDDF-Triangle}} - Compatibility and differences between FGCom, FGCom-mumble and Mumble&lt;br /&gt;
&lt;br /&gt;
===FlightGear Newsletter===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: First prototype announced&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Load tests successful, RDF implemented, Live-Status page added&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: More testing, new HF/VHF/UHF models, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API changes, distributed deployment, configuration trough INI, statistics&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: More API changes, proper 8.33kHz/25kHz overlap, RadiGUI added&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server announced&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringing networking capability&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF reworked, 0.12.0 announced, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Better airliner support, announced 0.13.0 and 0.14.0, restructured release package structure&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 announced, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 announced, updater bugfixes part II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 released, Mumble 1.4 hit the light'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea to integrate into FGFS ==&lt;br /&gt;
{{progressbar|10|10}} {{pending}}&lt;br /&gt;
&lt;br /&gt;
EDIT: Core ticket: https://gitlab.com/flightgear/flightgear/-/issues/3095&lt;br /&gt;
&lt;br /&gt;
ML Discussion: https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1919A28D-44D8-46F0-8A65-A5633A8AB743%40hallinger.org/#msg58717212&lt;br /&gt;
&lt;br /&gt;
Using [https://github.com/mumble-voip/libmumble libmumble], a standalone mumble c++17 library, we could integrate FGCom-mumble directly into FlightGear. This way, FGFS would talk &amp;quot;mumble&amp;quot; to a mumble server and the plugins functions would be integrated into the core. For pilots, a simple &amp;quot;click&amp;quot; to connect in the multiplayer would be enough to participate, while having all the advanced features of fgcom-mumble available (like custom NDBs, radio stations; as well as the possibility for other clients (ATC!) to participate easily on the radio spectrum).&lt;br /&gt;
&lt;br /&gt;
A main idea is also to use the existing fgcom-mumble code to avoid double work. But otoh maybe a direct rewrite of the core stuff may be cleaner; most of the magic is in the fgcom-mumble radio model code anyway, so we might just use some bits, if that is possible?&lt;br /&gt;
&lt;br /&gt;
libmubmble is not yet API-stable (but should be working), but there was already a [https://github.com/mumble-voip/libmumble/issues/18 first dicussion] about feasability and basic mechanics:&lt;br /&gt;
* From FGCom-mumbles side, we need to integrate the data structures into the core. So radios need to be registered, etc. This should not be too hard&lt;br /&gt;
** we probably just need to not run the UPD-Server but send the needed data directly into the decoding function of it. At a later stage, we might better integrate that part, but for a first working solution, just creatig a FCGOM-mumble UDP-Packet string in FGFS and sending it periodically (or already on-demand?) into the udp-servers decoder function should be enough - it just creates some CPU overhead which should not be too bad and will establish the needed local data structure.&lt;br /&gt;
** Note, that we cannot rely on the mpservers data structures (even if there is radio data), because in FGCom-mumble potential other clients are also participating (like radio-playback bots for ATIS etc!). So we really need to use mumbles plugin messages.&lt;br /&gt;
* Basicly the libmumble will run its own threads for networking. Upon receiving mumble audio or mumble-plugin data, callback functions would be called from the lib (https://github.com/mumble-voip/libmumble/issues/18#issuecomment-1868498537):&lt;br /&gt;
** Incoming audio data need to be processed by the fgcom-mumble plugin functions, and then the result handed over into fgfs audio out handling.&lt;br /&gt;
** Incoming plugin data needs to be fed into the fgcom-mumble internal remote data struct (just hand the data into the existing data parser).&lt;br /&gt;
* Pressing the already existing fgfs PTT button&lt;br /&gt;
** would need to send plugin data to mumble, to inform other clients. This is currently done by calling a mumble client function. It would probably be enough, if fgfs core supplied an implemention that calls the appropriate libmumble function and hands over the data.&lt;br /&gt;
** also, the audio data needs to be fetched from the mic, and then handed over to libmumbles audio encoding and sending routine. This probably can somewhat be partly copied from the legacy fgcom implementation.&lt;br /&gt;
* Questions regarding fgfs currently are:&lt;br /&gt;
** {{tick}} (''Answer:'' use [[Howto:Create_new_subsystems|Subsystem]]) how to exactly the integration on fgfs side works. That needs peeks on fgcoms code as well as some discussion at the mailing list.&lt;br /&gt;
** how to integrate the libmubmle code into the fgfs build chain (its cmake).&lt;br /&gt;
*** {{tick}} legally: libmubmle has a [https://github.com/mumble-voip/libmumble/blob/master/LICENSE BSD 3-clause] licence, is that compatible?&lt;br /&gt;
*** {{tick}} And what about libmubmles dependencies, like OpenSSL?&lt;br /&gt;
*** technically, how to include that all into the existing build system?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[de:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141454</id>
		<title>FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141454"/>
		<updated>2025-03-03T10:16:06Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Idea to integrate into FGFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simulates radio communication based on the VoIP software [https://www.mumble.info/ Mumble]. It integrates fully with the radio stack of your FlightGear plane, allowing you to communicate with other pilots and airspace controllers during your flight. It simulates a global, continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble is an alternative to the already known [[FGCom]] client and [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend].&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble leverages the plugin mechanism introduced by Mumble 1.4.0 and just needs a precompiled plugin loaded by a stock Mumble client.&lt;br /&gt;
You can download the latest release from https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Servers ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
*The main FGCom-mumble test server is &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
*The status page for that service showing all connected clients is at: https://fgcom-dev.hallinger.org/&lt;br /&gt;
*The mumble test server uses a autorenewed certificate from letsencrypt.&lt;br /&gt;
&lt;br /&gt;
==Project main goals==&lt;br /&gt;
*Provide communication with geographic and channel separation&lt;br /&gt;
*Provide a realistic radio simulation&lt;br /&gt;
*Ease of use for the end user/pilot&lt;br /&gt;
*Arbitrary frequency support&lt;br /&gt;
*ATIS recording and playback&lt;br /&gt;
*Radio station broadcast support&lt;br /&gt;
*Landline/Intercom support&lt;br /&gt;
*RDF detection for clients&lt;br /&gt;
*Ease of server side installation and operation&lt;br /&gt;
*Standalone nature (no dependency on FlightGear)&lt;br /&gt;
* Capability to be integrated into FlightGear, with the option to support third party applications (ATC, but also other flight simulators)&lt;br /&gt;
*Modularity, so individual component implementations can be switched and its easy to add features&lt;br /&gt;
*Good and complete documentation&lt;br /&gt;
&lt;br /&gt;
== Installation and setup==&lt;br /&gt;
The latest release can be fetched from [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] also has debug versions).&lt;br /&gt;
&lt;br /&gt;
The provided [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#install--setup-for-the-client README] has detailed instructions on the needed prerequisites and installation procedures.&lt;br /&gt;
&lt;br /&gt;
Someone even made an install video :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
(thanks mate, well done! however HF is actually simulated already :)&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
* Have a stock Mumble client &amp;gt;= 1.4 running, and load the plugin (mumble settings/plugins page)&lt;br /&gt;
* Join a channel named `fgcom-mumble` (on a &amp;gt;= 1.4 mumble server)&lt;br /&gt;
* Add the `fgfs-addon` folder of the client release as FlightGear Addon in your launcher&lt;br /&gt;
* Start FlightGear and use your plane's radio stack (it uses default FGCom buttons, see below)&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
FlightGear's FGCom-mumble protocol uses the default FGCom buttons:&lt;br /&gt;
* When you want to talk on COM1 you have to press {{Key press|Space}}. While transmitting you can not hear other pilots trough the used radio (they are half-duplex).&lt;br /&gt;
* You can also talk on COM2 by pressing {{Key press|Shift|Space}}.&lt;br /&gt;
* since FGCom-mumble 1.2.0:&lt;br /&gt;
** For COM3 you use {{Key press|Alt|Space}} (previously you need to define a custom keybind),&lt;br /&gt;
** Intercom is available in full-duplex with {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Any radio can also accessed by the COMBar (open from ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
If you want to try it out without FlightGear, you can also start the supplied RadioGUI.&lt;br /&gt;
&lt;br /&gt;
=== How to test your setup?===&lt;br /&gt;
First, make sure Mumble is working reliably by talking to other people. Either disable the plugin, or be sure you are outside any radio channel (starting with `fgcom-mumble`).&lt;br /&gt;
&lt;br /&gt;
The plugin alters Mumble's receiving audio stream. It adds static noise depending on the radio signal quality, or cancels out all audio when not in range. The outgoing audio stream is not altered in any way.&lt;br /&gt;
&lt;br /&gt;
If the server supports it (in essence there is a bot-manager running and a `fgcom-recorder-bot` listening) you may do a traditional echo test by tuning `910.00` and start to talk. The recorder-bot will record that (he writes that into mumbles chat) and spawn an echo bot at your position, replaying your message (so you will hear yourself like others will hear you).&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
For troubleshooting, refer to the projects [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#troubleshooting README] as it has further suggestions.&lt;br /&gt;
&lt;br /&gt;
If it's nothing setup related, an easy fix is to just restart mumble (the plugin will reinitialize itself).&lt;br /&gt;
&lt;br /&gt;
===Compatibility ===&lt;br /&gt;
FGCom-mumble supports the legacy FGCom UDP protocol and thus should be compatible to clients supporting that. However, it also features some new UDP fields.&lt;br /&gt;
&lt;br /&gt;
*FlightGear is supported through an [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon]. This assumes the default radio implementation and works with at least the C172P and the C182S.&lt;br /&gt;
*[[ATC-pie]] has built in support already (be sure to activate &amp;quot;FGCom-mumble&amp;quot; instead of just &amp;quot;FGCom&amp;quot; in the settings).&lt;br /&gt;
*[[OpenRadar]] currently supports just COM1 ([https://sourceforge.net/p/openradar/tickets/5/ ticket pending]). To use COM2 and more, you need to either start several mumble instances, or use FGCom-mumble's RadioGUI.&lt;br /&gt;
:There is a patched version of OpenRadar with FGCom-mumble and  8.33 channel tuning support available here: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
====Known incompatibilities====&lt;br /&gt;
* The legacy FGCom auto-enables itself, if you are connected to a multiplayer server and then open the &amp;quot;FGCom&amp;quot; dialog (instead of the &amp;quot;FGCom-mumble&amp;quot; one) from the multiplayer dialog. Then activating PTT can cause a FlightGear segfault. &lt;br /&gt;
* The UFO aircraft rebinds {{Key press|Space}} so you can't transmit on the radio. As a workaround you can use the COMBar that comes integrated with the FGFS addon.&lt;br /&gt;
* FGFS version &amp;lt;= 2020.3 is not compatible with FGCom-mumble addon versions &amp;gt;= 1.3.0. You need to stick to 1.2.0.&lt;br /&gt;
&lt;br /&gt;
==RadioGUI==&lt;br /&gt;
The FGCom-mumble RadioGUI is a small Java 8 application that can send the FGCom-mumble UDP messages to the Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
Inside the GUI, you can pick your location from a map and then setup and use your radio stack.&lt;br /&gt;
That said, the RadiGUI can be used instead (or additionally to) FGFS to participate on the simulated radio net.&lt;br /&gt;
&lt;br /&gt;
==Server side==&lt;br /&gt;
By design, all that is needed is a standard Murmur server (version 1.4.0 or later) and a specially named channel (it has to start with `fgcom-mumble`). This is enough to let the plugin do its work. The entire channel is treated as a single, worldwide continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
Additional features are implemented using server side Lua bots (which may run somewhere else):&lt;br /&gt;
* ATIS recording and broadcasting&lt;br /&gt;
* Radio program broadcasting (OGG playback on a frequency), [https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons] &lt;br /&gt;
* Status page data collection&lt;br /&gt;
&lt;br /&gt;
A status page showing client details is available as a PHP website, that gets its data fed from the fgcom-status-bot.&lt;br /&gt;
&lt;br /&gt;
Detailed installation and operation documentation is shipped with the releases, but is also [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server.md online].&lt;br /&gt;
&lt;br /&gt;
==How does it work? (technical information)==&lt;br /&gt;
The technical details are specified and described in the various readme files of the projects source code (as a starter read the [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Basicly, all users join the same mumble channel and run the fgcom-mumble plugin. The plugin knows everything necessary from the participating users (like radios used, frequencies tuned, locations, etc) and based on that information mutes or plays incoming voice messages from the other users. Based on signal quality, static noise is mixed in for more fun and a more realistic experience.&lt;br /&gt;
Because the voice of other users is muted, it is a design wise out-of-the-box feature that brings frequency and location separation but allows everyone to stay in the same mumble channel.&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] with hints etc&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README.md FGCom-mumble README.md] Main readme of the project bringing all the details you always wanted to know&lt;br /&gt;
&lt;br /&gt;
===Forum topic===&lt;br /&gt;
*The {{forum link|t=37644|title=FGCom-mumble}} has development discussions and release announcements&lt;br /&gt;
*{{forum link|p=374950|title=Re: EDDF-Triangle}} and  {{forum link|p=374970|title=Re: EDDF-Triangle}} - Compatibility and differences between FGCom, FGCom-mumble and Mumble&lt;br /&gt;
&lt;br /&gt;
===FlightGear Newsletter===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: First prototype announced&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Load tests successful, RDF implemented, Live-Status page added&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: More testing, new HF/VHF/UHF models, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API changes, distributed deployment, configuration trough INI, statistics&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: More API changes, proper 8.33kHz/25kHz overlap, RadiGUI added&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server announced&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringing networking capability&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF reworked, 0.12.0 announced, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Better airliner support, announced 0.13.0 and 0.14.0, restructured release package structure&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 announced, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 announced, updater bugfixes part II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 released, Mumble 1.4 hit the light'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea to integrate into FGFS ==&lt;br /&gt;
{{progressbar|10|10}} {{pending}}&lt;br /&gt;
&lt;br /&gt;
EDIT: Core ticket: https://gitlab.com/flightgear/flightgear/-/issues/3095&lt;br /&gt;
&lt;br /&gt;
ML Discussion: https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1919A28D-44D8-46F0-8A65-A5633A8AB743%40hallinger.org/#msg58717212&lt;br /&gt;
&lt;br /&gt;
Using [https://github.com/mumble-voip/libmumble libmumble], a standalone mumble c++17 library, we could integrate FGCom-mumble directly into FlightGear. This way, FGFS would talk &amp;quot;mumble&amp;quot; to a mumble server and the plugins functions would be integrated into the core. For pilots, a simple &amp;quot;click&amp;quot; to connect in the multiplayer would be enough to participate, while having all the advanced features of fgcom-mumble available (like custom NDBs, radio stations; as well as the possibility for other clients (ATC!) to participate easily on the radio spectrum).&lt;br /&gt;
&lt;br /&gt;
A main idea is also to use the existing fgcom-mumble code to avoid double work. But otoh maybe a direct rewrite of the core stuff may be cleaner; most of the magic is in the fgcom-mumble radio model code anyway, so we might just use some bits, if that is possible?&lt;br /&gt;
&lt;br /&gt;
libmubmble is not yet API-stable (but should be working), but there was already a [https://github.com/mumble-voip/libmumble/issues/18 first dicussion] about feasability and basic mechanics:&lt;br /&gt;
* From FGCom-mumbles side, we need to integrate the data structures into the core. So radios need to be registered, etc. This should not be too hard&lt;br /&gt;
** we probably just need to not run the UPD-Server but send the needed data directly into the decoding function of it. At a later stage, we might better integrate that part, but for a first working solution, just creatig a FCGOM-mumble UDP-Packet string in FGFS and sending it periodically (or already on-demand?) into the udp-servers decoder function should be enough - it just creates some CPU overhead which should not be too bad and will establish the needed local data structure.&lt;br /&gt;
** Note, that we cannot rely on the mpservers data structures (even if there is radio data), because in FGCom-mumble potential other clients are also participating (like radio-playback bots for ATIS etc!). So we really need to use mumbles plugin messages.&lt;br /&gt;
* Basicly the libmumble will run its own threads for networking. Upon receiving mumble audio or mumble-plugin data, callback functions would be called from the lib (https://github.com/mumble-voip/libmumble/issues/18#issuecomment-1868498537):&lt;br /&gt;
** Incoming audio data need to be processed by the fgcom-mumble plugin functions, and then the result handed over into fgfs audio out handling.&lt;br /&gt;
** Incoming plugin data needs to be fed into the fgcom-mumble internal remote data struct (just hand the data into the existing data parser).&lt;br /&gt;
* Pressing the already existing fgfs PTT button&lt;br /&gt;
** would need to send plugin data to mumble, to inform other clients. This is currently done by calling a mumble client function. It would probably be enough, if fgfs core supplied an implemention that calls the appropriate libmumble function and hands over the data.&lt;br /&gt;
** also, the audio data needs to be fetched from the mic, and then handed over to libmumbles audio encoding and sending routine. This probably can somewhat be partly copied from the legacy fgcom implementation.&lt;br /&gt;
* Questions regarding fgfs currently are:&lt;br /&gt;
** {{tick}} (''Answer:'' use [[Howto:Create_new_subsystems|Subsystem]]) how to exactly the integration on fgfs side works. That needs peeks on fgcoms code as well as some discussion at the mailing list.&lt;br /&gt;
** how to integrate the libmubmle code into the fgfs build chain (its cmake).&lt;br /&gt;
*** {{tick}} legally: libmubmle has a [https://github.com/mumble-voip/libmumble/blob/master/LICENSE BSD 3-clause] licence, is that compatible?&lt;br /&gt;
*** {{tick}} And what about libmubmles dependencies, like OpenSSL?&lt;br /&gt;
*** technically, how to include that all into the existing build system?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[de:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Addon&amp;diff=141400</id>
		<title>Addon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Addon&amp;diff=141400"/>
		<updated>2025-02-24T08:55:38Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Nasal API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Fgaddonslogo202x89.png|right]] &lt;br /&gt;
To make it easier to create '''addons''' there is since FlightGear 2017.3 a new way to create addons.  In essence FlightGear will load an overlay XML into the property tree and start a well known Nasal function.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314620#p314620 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: New Feature: Addon - &amp;quot;API&amp;quot; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We now have a simple way to add addons to FlightGear without the need to mess around with &amp;lt;code&amp;gt;FGData/Nasal&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;FGHome/Nasal&amp;lt;/code&amp;gt; directories.&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314563#p314563 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; New Feature: Addon - &amp;quot;API&amp;quot; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 18th, 2017 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
&lt;br /&gt;
== Installing and using an addon ==&lt;br /&gt;
Download and copy the addon to a directory on your computer.&lt;br /&gt;
&lt;br /&gt;
If you use the launcher, select the Add-ons page from the icon bar on the left, then find the section Add-on Module folders and click the Add(+) button. Select the folder where you put the addon. Once the addon is shown in the list, make sure its check box is selected.&lt;br /&gt;
&lt;br /&gt;
Use the command line switch &amp;lt;code&amp;gt;--addon=/path/to/some/addon&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating an addon ==&lt;br /&gt;
There is a very simple Skeleton addon available in FGAddon to be used as a template.&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;/&amp;gt; See {{fgaddon source|path=Addons/Skeleton}}.&lt;br /&gt;
&lt;br /&gt;
A leading slash (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;) in this section indicates the base directory of the directory structure of the addon.&lt;br /&gt;
&lt;br /&gt;
=== Minimum configuration ===&lt;br /&gt;
An addon may be installed in a directory anywhere on your hard disk and need at least two files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-config.xml&amp;lt;/code&amp;gt; - A standard [[PropertyList XML files|PropertyList XML file]] to be used to populate or modify the [[property tree]]. (Same as to be used in &amp;lt;code&amp;gt;--config=foo.xml&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-main.nas&amp;lt;/code&amp;gt; - The Nasal hook for the logic. This file needs a function called &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt; which will be called from the global addon initializer (&amp;lt;code&amp;gt;addons.nas&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Additional common files ===&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-metadata.xml&amp;lt;/code&amp;gt; - A PropertyList XML file with metadata about the addon it.&lt;br /&gt;
* &amp;lt;code&amp;gt;/addon-menubar-items.xml&amp;lt;/code&amp;gt; - A PropertyList XML file describing menus to be added to the FlightGear menu bar.&lt;br /&gt;
* &amp;lt;code&amp;gt;/gui/dialogs/&amp;amp;lt;my-foobar-dialog&amp;amp;gt;.xml&amp;lt;/code&amp;gt; - PropertyList XML files to create custom dialogs.&lt;br /&gt;
&lt;br /&gt;
=== Good to know ===&lt;br /&gt;
The new addon mechanism lets you add a &amp;lt;code&amp;gt;addon-config.xml&amp;lt;/code&amp;gt; to override the settings in &amp;lt;code&amp;gt;defaults.xml&amp;lt;/code&amp;gt; and other files.&lt;br /&gt;
&lt;br /&gt;
That will allow an addon to&lt;br /&gt;
*  Override key bindings (as in the spoken ATC addon)&lt;br /&gt;
*  Add or override autopilots and property rules&lt;br /&gt;
*  Introduce XML state machines&lt;br /&gt;
&lt;br /&gt;
Unless your really want to add/change/remove those at runtime, this should cater for most use cases.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314902#p314902 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Spoken  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 23rd, 2017 &lt;br /&gt;
  |added  =  Jul 23rd, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have some instructions how to use SVN [[FGAddon|in our wiki]]. It covers mostly aircraft development but the workflow is pretty much the same for addons.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314647#p314647 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Spoken ATC &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sound Support ===&lt;br /&gt;
Sound support is available using fgcommand's.&lt;br /&gt;
&lt;br /&gt;
See [[Nasal FAQ]] &amp;quot;play-audio-sample&amp;quot;&lt;br /&gt;
&lt;br /&gt;
https://sourceforge.net/p/flightgear/flightgear/ci/5acf2e26d085b7553b2387b9753e9253e8b4bff4&lt;br /&gt;
&lt;br /&gt;
[[Hackathon Proposal:Addon specific Sound Queues]]&lt;br /&gt;
&lt;br /&gt;
== Addon initialization ==&lt;br /&gt;
On initialization fgfs takes care of:&lt;br /&gt;
* Through {{flightgear source|path=src/Main/options.cxx|text=&amp;lt;code&amp;gt;options.cxx&amp;lt;/code&amp;gt;}}:&amp;lt;ref name=&amp;quot;Forum_announcement&amp;quot;/&amp;gt;&lt;br /&gt;
** Creating a property under &amp;lt;code&amp;gt;/addons/addon[n]/path=/path/to/some/addon&amp;lt;/code&amp;gt;&lt;br /&gt;
** Loading &amp;lt;code&amp;gt;/path/to/some/addon/addon-config.xml&amp;lt;/code&amp;gt; into the property tree (same as &amp;lt;code&amp;gt;--config=/path/to/some/addon/addon-config.xml&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Adding &amp;lt;code&amp;gt;/path/to/some/addon&amp;lt;/code&amp;gt; to the list of allowed directories (same as &amp;lt;code&amp;gt;--fg-aircraft=/path/to/some/addon&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Through {{fgdata source|path=Nasal/addons.nas|text=&amp;lt;code&amp;gt;addons.nas&amp;lt;/code&amp;gt;}}:&lt;br /&gt;
** Loading &amp;lt;code&amp;gt;/foo/bar/baz/addon-main.nas&amp;lt;/code&amp;gt; into namespace &amp;lt;code&amp;gt;__addon[ADDON_ID]__&amp;lt;/code&amp;gt;&lt;br /&gt;
** Calling &amp;lt;code&amp;gt;main(addonGhost)&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;/foo/bar/baz/addon-main.nas&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Aircraft specific config (addon-hints) ==&lt;br /&gt;
Some addons need per-aircraft configuration. While addons should strive to be self-contained (ie. the addon should contain means to&lt;br /&gt;
detect different aircraft and apply config from whithin the addon) there is also the possibility for the addon to read so called &amp;quot;addon-hints&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For this, a special property tree exists: &amp;lt;code&amp;gt;/sim/addon-hints/&amp;lt;addon&amp;gt;/...&amp;lt;/code&amp;gt;&lt;br /&gt;
The tree is expected to be populated from the aircraft.xml file. The addon can then read the properties from a common place regardless of loaded aircraft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;addon-hints&amp;gt;&lt;br /&gt;
    &amp;lt;my-addon&amp;gt;&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/my-addon&amp;gt;&lt;br /&gt;
  &amp;lt;/addon-hints&amp;gt;&lt;br /&gt;
&amp;lt;/sim&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
{{hatnote|For more details about these APIs, see the readme file, {{readme file|add-ons}}.}}&lt;br /&gt;
=== C++ API ===&lt;br /&gt;
There is a C++ API on FlightGear's side that handle some on the addon related tasks manly through the &amp;lt;code&amp;gt;AddonManager()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Addon()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AddonVersion()&amp;lt;/code&amp;gt; classes.&lt;br /&gt;
&lt;br /&gt;
=== Nasal API ===&lt;br /&gt;
The Nasal add-on API lives in the 'addons' namespace and can for example do queries to &amp;lt;code&amp;gt;AddonManager()&amp;lt;/code&amp;gt; and read data from &amp;lt;code&amp;gt;addons.Addon&amp;lt;/code&amp;gt; objects.  It can for example compare addon versions if there is dependencies.&lt;br /&gt;
&lt;br /&gt;
See: {{Repo link|site=gitlab|proj=flightgear|repo=fgdata|branch=next|path=Nasal/addons.nas}}&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
{{See also|Howto:Creating a simple modding framework}}&lt;br /&gt;
&lt;br /&gt;
ATC chatter was removed in 2015, see fgdata commit: [https://sourceforge.net/p/flightgear/fgdata/ci/81607f734e13add9be02816ddaec305d05bc4e47/ 81607f734e13add9be02816ddaec305d05bc4e47]&lt;br /&gt;
&lt;br /&gt;
And the devel list messages referenced in the commit log.&lt;br /&gt;
the other relevant commit is this: b60736ba7add2a7cd39af3d8a974d5be3ea46e8b&lt;br /&gt;
It would not be very difficult to restore this functionality, or even generalize/improve it significantly (which was the scope of the original discussion on the devel list)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=288388#p288388 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Whatever happened to radom radio  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Hooray &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jun 11th, 2016 &lt;br /&gt;
  |added  =  Jun 11th, 2016 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The restored functionality could be distributed as a tarball that is extracted into $FG_ROOT - alternatively, into $FG_HOME, because Nasal files there are treated as overlays, which basically means that you can install user-specific extensions there without having to tamper with $FG_ROOT, it would only take  very minor changes to turn the chatter feature into a corresponding &amp;quot;addon&amp;quot; - not unlike fgcamera ...&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=288392#p288392 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Whatever happened to radom radio  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Hooray &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jun 11th, 2016 &lt;br /&gt;
  |added  =  Jun 11th, 2016 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We should absolutely stop telling anyone to edit preferences.xml in FG_ROOT; any documentation or advice which says to should be changes ASAP. &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=192632#p192632 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: NavCache:init failed:Sqlite error:Sqlite API abuse &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; zakalawe &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Oct 26th, 2013 &lt;br /&gt;
  |added  =  Oct 26th, 2013 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of 12/2017, the addon API is in the process of being significantly updated &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36146017/&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36150159/&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36150444/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List of Addons ==&lt;br /&gt;
You can find the official repository at {{fgaddon source|path=Addons}}&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-hudheli Additional Heli HUD's] - ([https://github.com/slawekmikula/flightgear-addon-hudheli/blob/master/doc/manual.md manual]) - encapsulation of HeliHUD package as an addon&lt;br /&gt;
* [https://github.com/PlayeRom/flightgear-addon-aerotow-everywhere Aerotow Everywhere] AI towing aircraft for gliders at every airport.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?t=40742&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Aerotow Everywhere &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Roman Ludwicki (PlayeRom) &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Aug 14th, 2022&lt;br /&gt;
  |added  =  Aug 14th, 2022&lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://github.com/SP-NTX/AnotherGUI AnotherGUI] - An add-on that adds a new GUI style.&lt;br /&gt;
* ATC Chatter (ported by Torsten) {{progressbar|100}}&lt;br /&gt;
* [[Cargo Towing Addon]] &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?t=36824&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Cargo Towing Addon &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Wayne Bragg (wlbragg) &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  &lt;br /&gt;
  |added  =  &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* cockpit-view (work in progress by wkitty42)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=316498#p316498 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; wkitty42 &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Aug 13th, 2017 &lt;br /&gt;
  |added  =  Aug 13th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Earthview#Customization]] - High resolution customization&lt;br /&gt;
* [[FaceTrackNoIR]] (ported by HHS)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/36454826/&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Unknown, HHS&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |date   =  Nov 1th, 2018 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt; - An addon to interface this [[Head tracking|head tracker]] with FlightGear&lt;br /&gt;
* [https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=24792 Fencemaker] (Eases creating Fence-like scenery objects. Originally by VaLeo, converted to an addon by sfr) - ([https://www.mediafire.com/file/cf0la63v9g352md/fencemaker_addon.zip/file download])&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    = https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=24792&amp;amp;start=45#p390066&lt;br /&gt;
  |title  = &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |author = &amp;lt;nowiki&amp;gt; Stefan Frank &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |maintainer = &amp;lt;nowiki&amp;gt; Stefan Frank &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  |date   = Aug 8th, 2021&lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://github.com/PlayeRom/flightgear-addon-fgcamera FGCamera] - ([https://github.com/PlayeRom/flightgear-addon-fgcamera/blob/master/Docs/manual.md manual]) - [[FGCamera | Wiki Page]]&lt;br /&gt;
* [[FGPlot]]&lt;br /&gt;
* [[Ground Services]] (ported by ThomasS)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=316400#p316400 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; ThomasS &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Aug 12th, 2017 &lt;br /&gt;
  |added  =  Aug 12th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* {{fgaddon source|path=Addons/Headtracker/|text=Headtracker addon}} Helps integrate FaceTrackNoIR and opentrack with FlightGear.&lt;br /&gt;
* [[HighAirTrader]] An in-sim mini game in which you transport goods to different airports.&lt;br /&gt;
* [https://github.com/tdammers/fg-hoppie-acars Hoppie ACARS client] - connect to [http://www.hoppie.nl/acars Hoppie's ACARS], used on VATSIM and other networks.&lt;br /&gt;
* [https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/trunk/Addons/Illuminator/ Illuminator] - configure lights attached to 3D models (e.g. taxi light, landing light or a light attached to a scenery model like a light pole) at runtime.&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-protocolkml KML Exporter (Google Earth)] - ([https://github.com/slawekmikula/flightgear-addon-protocolkml/blob/master/doc/manual.md manual])&lt;br /&gt;
* [[Landing Rate addon]] [https://forum.flightgear.org/viewtopic.php?f=6&amp;amp;t=33101&amp;amp;p=327787#p327787]&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-linuxtrack LinuxTrack Head Tracker integration] - ([https://github.com/slawekmikula/flightgear-addon-linuxtrack/blob/master/doc/manual.md manual])&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-littlenavmap LittleNavMap integration] - ([https://github.com/slawekmikula/flightgear-addon-littlenavmap/blob/master/doc/manual.md manual])&lt;br /&gt;
* [https://github.com/PlayeRom/flightgear-addon-logbook Logbook] all your flights to CSV file.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?t=41070&lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: Logbook Add-on &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Roman Ludwicki (PlayeRom) &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Dec 11th, 2022&lt;br /&gt;
  |added  =  Dec 11th, 2022&lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://gitlab.com/mdanil/flightgear-hax mdanilov hax!]: landing evaluation and aircraft development tools, TerraSync toggler&lt;br /&gt;
* [[Model Cockpit View]] &lt;br /&gt;
* [https://github.com/SP-NTX/MPChatImprovments MPChatImprovments] Multi-key commands for Multiplayer, new features for chat,...&lt;br /&gt;
* [[Oscilloscope addon]] - Allows displaying a property of Nasal function over time&lt;br /&gt;
* [[PAR instrument]] - Precision Approach Radar and Ground Controlled Approach&lt;br /&gt;
* [[Red Griffin ATC]] - Speaking Air Traffic Controller&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?f=6&amp;amp;t=36755 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; RedGriffin &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jan 6th, 2020 &lt;br /&gt;
  |added  =  Jan 6th, 2020 &lt;br /&gt;
  |script_version = 1.0.0 RC2 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://github.com/tdammers/fg-simbrief-addon SimBrief import] - Import flightplans, weights, fuel, and winds alof, from SimBrief.&lt;br /&gt;
* [[Spoken ATC]] (ported by Torsten)&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://forum.flightgear.org/viewtopic.php?p=314095#p314095 &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re:  &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Torsten &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 10th, 2017 &lt;br /&gt;
  |added  =  Jul 10th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Spoken GCA]] - An offline ground controlled approach (GCA) addon&lt;br /&gt;
* [[Log time-stamper add-on]] - Will print simulated UTC time, real local time, and/or real UTC time time-stamps at configurable intervals to the console and log.&lt;br /&gt;
* [https://gitlab.com/mdanil/flightgear-mickey Tiny HUD for mouse flying in FlightGear] - Visual feedback for mouse flying, to make up for mouse's lack of self-centering&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-vfrflight VFRFlight integration] - ([https://github.com/slawekmikula/flightgear-addon-vfrflight/blob/master/doc/manual.md manual])&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-vfrnavigator VFR Flying Helper] - ([https://github.com/slawekmikula/flightgear-addon-vfrnavigator/blob/master/doc/usage.md manual])&lt;br /&gt;
* [[YASim Development Tools]] (by jsb)&lt;br /&gt;
* [https://github.com/hbeni/fgfs-noGroundDamage noGroundDamage] - Addon to temporarily disable damage after landing and for ground operations for the c172/c182&lt;br /&gt;
&lt;br /&gt;
== Experimental Addons ==&lt;br /&gt;
&lt;br /&gt;
Addons which are in the development stage/unfinished but can be used as a quick view of addon functionality&lt;br /&gt;
* [https://github.com/slawekmikula/flightgear-addon-missions FlightGear Missions addon] - Add-on for missions/adventures code&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
=== Hooking into features using legacy OpenGL code ===&lt;br /&gt;
{{See also|Unifying the 2D rendering backend via canvas}}&lt;br /&gt;
In 09/2018, James suggested that legacy features using raw OpenGL calls (e.g. HUD/2D panels) could be easily replaced via scripted Canvas/Nasal solutions at the mere cost of providing a mechanism to hook into the legacy code implementing these features (namely, the HUD/instrumentation subsystems) &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36399261/&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/36399261/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Catalog &amp;amp; Package Manager support ===&lt;br /&gt;
if this works with more complex, pre-existing addons such as [[Bombable]], where the file layout is a replica of the old FGData layout, these types of mature addons might be better as SourceForge FlightGear sub-projects rather than being copied into FGAddon. Maybe the config file and nasal script could be used to automate the installation process ?&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35953179/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] Simple API for creating FlightGear&lt;br /&gt;
 addons/plugins &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Edward d'Auvergne &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
The [[Bombable]] addon is one of the most popular addons out there, and a large number of aircraft in FGAddon have bombable support, so it is worth not forgetting about. Especially if the addon system one day becomes automated through a [[Catalog metadata|catalog.xml type system]]&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
  |url    =  https://sourceforge.net/p/flightgear/mailman/message/35953650/ &lt;br /&gt;
  |title  =  &amp;lt;nowiki&amp;gt; Re: [Flightgear-devel] Simple API for creating FlightGear&lt;br /&gt;
 addons/plugins &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |author =  &amp;lt;nowiki&amp;gt; Edward d'Auvergne &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
  |date   =  Jul 19th, 2017 &lt;br /&gt;
  |added  =  Jul 19th, 2017 &lt;br /&gt;
  |script_version = 0.40 &lt;br /&gt;
  }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[FG Add-on FAQ]]&lt;br /&gt;
* [[Modules.nas]]&lt;br /&gt;
* [[FlightGear configuration via XML]]&lt;br /&gt;
* [[FlightGear configuration via XML#preferences.xml]]&lt;br /&gt;
* [[Nasal]]&lt;br /&gt;
* [[Property tree]]&lt;br /&gt;
* [[Properties persistent between sessions]]&lt;br /&gt;
* [[PropertyList XML File]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=32561|title=New Feature: Addon - &amp;quot;API&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== Readme files ===&lt;br /&gt;
* {{readme file|add-ons}}&lt;br /&gt;
* {{readme file|gui}} - Details on how to add menus and custom dialogs.&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
==== FGAddon ====&lt;br /&gt;
* {{fgaddon source|path=Addons/Skeleton}} - Skeleton addon to be used as a template.&lt;br /&gt;
&lt;br /&gt;
==== FGData ====&lt;br /&gt;
* {{fgdata source|path=Nasal/addons.nas}}&lt;br /&gt;
&lt;br /&gt;
==== FlightGear ====&lt;br /&gt;
* {{flightgear source|path=src/Main/options.cxx}}&lt;br /&gt;
* {{flightgear source|path=src/Add-ons/}}&lt;br /&gt;
&lt;br /&gt;
[[Category:FlightGear addons| ]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_February_2025&amp;diff=141392</id>
		<title>FlightGear Newsletter February 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_February_2025&amp;diff=141392"/>
		<updated>2025-02-21T07:59:24Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: Newsletter creation, automatic preload from here&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
NOTES TO EDITORS&lt;br /&gt;
&lt;br /&gt;
* Headings&lt;br /&gt;
  * DO NOT DELETE HEADINGS prior to final cleanup&lt;br /&gt;
  * Current headings and their order is merely a suggestion based on what have been used earlier&lt;br /&gt;
  * Changes made to headings or structure should also be copied the Newsletter template http://wiki.flightgear.org/User:Skybike/Template:This_months_newsletter/Newsletter_example&lt;br /&gt;
&lt;br /&gt;
* Final cleanup before write protecting&lt;br /&gt;
  * Remove unused headings&lt;br /&gt;
  * Remove {{Appendix}} if not used.&lt;br /&gt;
  * Update &amp;quot;Category: Changes after&amp;quot; to the FG version current at the 1st of this month&lt;br /&gt;
  * Finally remove this comment&lt;br /&gt;
  * Update [[Next Newsletter]] and [[FlightGear Newsletter]]&lt;br /&gt;
&lt;br /&gt;
* Discussion, issues and suggestions&lt;br /&gt;
  * Regarding this newsletter issue, please use the discussion page&lt;br /&gt;
  * Regarding the newsletter in general, primarily use the FlightGear Newsletter discussion page (Talk:FlightGear Newsletter)&lt;br /&gt;
  * Regarding this Newsletter template, please use FIXME&lt;br /&gt;
&lt;br /&gt;
+++   {{Newsletter-header|{{#time: F | 2025-02}}}}   +++&lt;br /&gt;
--&amp;gt;{{User:Skybike/Template:Newsletter-header-translate|2025-02}}&lt;br /&gt;
{{TOC_right|limit=2}}&lt;br /&gt;
''We would like to emphasize that the monthly newsletter cannot live without the contributions of FlightGear users and developers. Everyone with a wiki account (free to register) is welcome to contribute to the newsletter.  If you know about any FlightGear related news or projects such as for example updated scenery or aircraft, please do feel invited to add such news to the newsletter.''&lt;br /&gt;
&lt;br /&gt;
''The new Visual Editor makes editing the wiki as simple as using a Word-processor, and even easier than using the forum as you don't even need to know the syntax for a url. Just hit the 'edit' link and start.''&lt;br /&gt;
&lt;br /&gt;
== Development news ==&lt;br /&gt;
&amp;lt;!-- News about FlightGear itself.  The FlightGear mailing list and/or core developers are a good source. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- {{Disclaimer|id=final-fixed-function-release}}--&amp;gt;&lt;br /&gt;
* Comm radio instrument enhanced&lt;br /&gt;
** The configuration got a new optional setting in [[Instrumentation#Comm_Radio|instrumentation.xml]] to allow setting it to full-/half-duplex mode. In half-duplex mode, the radio will not receive (Atis, ...) when PTT is set to 1 (like when using FGCom). In 2024.1 this still defaults to &amp;quot;full-duplex&amp;quot;, but in next this will change to the more sane half-duplex mode. This is chaneable also at runtime. Aircraft devs are only needing to get active if they want half-duplex in 2024.1, or if they simulate a full-duplex capable radio.&lt;br /&gt;
** The radio will expose a new runtime flag: &amp;lt;code&amp;gt;/instrumentation/comm[n]/receiving-flag&amp;lt;/code&amp;gt; that is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; when the device receives something (currently only ATIS/AWOS, also depending on the full-duplex mode and PTT).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Related Software tools and projects == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Those not being part of FlightGear itself, like for example OpenRadar, TerreMaster or flightgear-atc.alwaysdata.net. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the hangar ==&lt;br /&gt;
&amp;lt;!-- News about new and upgraded aircraft and related stuff.  The official forum and other ones usually are a good source for this. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === New aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Updated aircraft === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Liveries === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Instruments === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- === Aircraft reviews === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scenery corner ==&lt;br /&gt;
&amp;lt;!-- Scenery development news --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Scenery Models === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Airports === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Land cover === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Osm2city === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === New OSM2City areas === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Interview with a contributor == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Suggested flights == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Help wanted ==&lt;br /&gt;
{{Help wanted}}&lt;br /&gt;
&lt;br /&gt;
== AI == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === AI traffic === --&amp;gt;&lt;br /&gt;
The AI team makes FlightGear more realistic, colorful and lively every month. You can support the development of ''Interactive Traffic'' and contribute at the FlightGear {{forum link|title=AI|f=23}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === AI scenarios === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Community news ==&lt;br /&gt;
&amp;lt;!-- === FlightGear on YouTube === --&amp;gt;&lt;br /&gt;
&amp;lt;!-- embed video as {{#ev:youtube|VCc6PwRI1LA}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Forum news === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Wiki updates === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Article of the month === --&amp;gt;&lt;br /&gt;
=== FlightGear on Facebook ===&lt;br /&gt;
Since early December 2010, FlightGear has an [https://www.facebook.com/FlightGear official Facebook page].  If you have a Facebook account please feel free to join the page.&lt;br /&gt;
&lt;br /&gt;
=== FlightGear on Instagram ===&lt;br /&gt;
In January 2018 the [https://www.instagram.com/flightgear_sim/ @flightgear_sim Instagram account] was brought back to life. If you've got nice screenshots to be featured, feel free to {{forum link|text=contact the maintainer|t=33636}}.&lt;br /&gt;
&lt;br /&gt;
=== FlightGear on FlightSim.com ===&lt;br /&gt;
FlightGear has also a [https://www.flightsim.com/vbfs/forumdisplay.php?102-FlightGear sub-forum] on flightsim.com - just like the commercial flight sims. It is an opportunity to showcase what FG can do, get people curious and answer any questions they may have with regard to the software or the project.&lt;br /&gt;
&lt;br /&gt;
== Multiplayer events ==&lt;br /&gt;
&amp;lt;!-- === Upcoming events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Finished events === --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == FlightGear events == --&amp;gt;&lt;br /&gt;
&amp;lt;!-- For example presence at FSWeekend --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Hardware reviews == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contributing ==&lt;br /&gt;
=== Translators needed ===&lt;br /&gt;
{|&lt;br /&gt;
| [[File:en.gif]]&lt;br /&gt;
| The FlightGear Wiki still needs help for translating it into various languages. If you are interested in making the FlightGear Wiki multilingual, you can start by looking at [[Help:Translate]].&lt;br /&gt;
|-&lt;br /&gt;
| [[File:fr.gif]]&lt;br /&gt;
| Le wiki de FlightGear a toujours besoin d'aide pour être traduit en différentes langues. Si vous êtes intéressé par le rendre multilingue, commencez par lire [[:fr:Help:Traduire|Help:Traduire]].&lt;br /&gt;
|-&lt;br /&gt;
| [[File:de.gif]]&lt;br /&gt;
| Das FlightGear Wiki benötigt immer noch Hilfe bei der Übersetzung in verschiedene Sprachen. Wenn Du Interesse daran hast, das FlightGear Wiki mehrsprachig zu machen, dann fang mit dem [[:de:Help:Übersetzen|Help:Übersetzen]] an.&lt;br /&gt;
|-&lt;br /&gt;
| [[File:nl.gif]]&lt;br /&gt;
| De FlightGear Wiki kan nog steed hulp gebruiken bij het vertalen van artikelen. Als je interesse hebt om de wiki meertalig te maken, raden we je aan om een kijkje te nemen bij [[:nl:Help:Vertalen|Help:Vertalen]].&lt;br /&gt;
|-&lt;br /&gt;
| [[File:es.gif]]&lt;br /&gt;
| La wiki de FlightGear todavía necesita ayuda para traducirla a varios lenguajes. Si estás interesado en hacer la FlightGear wiki multilingüe, entonces comienza en [[:es:Help:Traducir|Help:Traducir]].&lt;br /&gt;
|-&lt;br /&gt;
| [[File:cat.gif]]&lt;br /&gt;
| La wiki de FlightGear encara necessita ajuda per traduir-la a diverses llengües. Si esteu interessat en fer la wiki de FlightGear multilingüe, llavors comenceu a [[:ca:Help:Traduir|Help:Traduir]].&lt;br /&gt;
|-&lt;br /&gt;
| [[File:pt.gif]]&lt;br /&gt;
| A wiki de FlightGear ainda necessita de ajuda para traduzi-la em vários idiomas. Se estás interessado em tornar a wiki de FlightGear multi-lingual, por favor começa em [[:pt:Help:Traduzir|Help:Traduzir]].&lt;br /&gt;
|-&lt;br /&gt;
| [[File:zh.gif]]&lt;br /&gt;
| FlightGear 百科仍然需要志愿者将其翻译为各种语言。如果你有兴趣让FlightGear百科支持更多语言, 你可以查看 [[Help:Translate]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FlightGear logos ===&lt;br /&gt;
If you want some graphic elements for your FlightGear-related site (such as a hangar or YouTube channel), please feel free to visit [[FlightGear logos]] for a repository of logos. And if you have some art skills, please don't hesitate to contribute with your own design creations.&lt;br /&gt;
&lt;br /&gt;
=== Screenshots ===&lt;br /&gt;
The FlightGear project always needs screenshots, which show features that were added since the last release. These should be of good quality, especially in content and technical image properties. It is therefore recommended to use the best viable filter settings ([[anti-aliasing]], texture sharpening, etc.). More info at [[Howto:Make nice screenshots]].&lt;br /&gt;
&lt;br /&gt;
==== Screenshot of the Month ====&lt;br /&gt;
&amp;lt;!--FlightGear's Screenshot of the Month {{#time: F | 2025-02}} 2025 is FIXME by {{usr|FIXME}}&lt;br /&gt;
ADD IMAGE --&amp;gt;&lt;br /&gt;
If you want to participate in the screenshot contest&amp;lt;!-- of {{#time: F | 2025-02 + 1month}}--&amp;gt;, you can submit your candidate to the {{forum link|title=this|f=88|t=}}. Be sure to see the first post for participation rules. For purposes of convenience and organization, at the end of the month or after 20 entries have been submitted, a new forum topic will be started containing all shots in an easy-to-view layout. The voting will then take place there.&amp;lt;!--Once the voting has finished, the best screenshot will be presented in the Newsletter edition of {{#time: F | 2025-02 + 1month}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Thanks for reading {{PAGENAME}}!''&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&amp;lt;!--&amp;lt;small&amp;gt;&amp;lt;div style=&amp;quot;text-align: center; size: 15px&amp;quot;&amp;gt;About the [[FlightGear Newsletter]]  -  Information for [[Template:Welcome to the wiki|new Wiki users]]  -  Manual to the FlightGear Wiki [[Help:Your_first_article#Formatting_the_wiki_text|syntax]]  -  Edit the [[User:Skybike/Template:This_months_newsletter/Newsletter_example|draft]] for coming newsletters&amp;lt;/div&amp;gt;&amp;lt;/small&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Changes after 2020.3]]&amp;lt;!--Has a new version been released this month? Use previous version!--&amp;gt;&lt;br /&gt;
[[Category:FlightGear Newsletter|2025 02]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[de:FlightGear Newsletter {{#time: F Y | 2025-02 | de }}]]--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Instrumentation&amp;diff=141391</id>
		<title>Instrumentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Instrumentation&amp;diff=141391"/>
		<updated>2025-02-21T07:50:02Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Comm Radio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FlightGear's built-in '''Instrumentation system''' simulates basic instruments used in many aircraft and provide their output as [[Property|Properties]] to be used e.g. for [[Howto:Animate models|animating]] 3D instruments or [[Canvas]] instruments. &lt;br /&gt;
&lt;br /&gt;
This article is meant to provide an overview over the instrumentation modules available and their configuration. &lt;br /&gt;
&lt;br /&gt;
=== General configuration ===&lt;br /&gt;
The instrumentation modules to be available to an aircraft can be selected by the aircraft developer using an instrumentation XML configuration file. This file is called from the [[Aircraft-set.xml]]:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;instrumentation&amp;gt;&lt;br /&gt;
    &amp;lt;path&amp;gt;Systems/my-aircraft-instrumentation.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
  &amp;lt;/instrumentation&amp;gt;&lt;br /&gt;
&amp;lt;/sim&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A generic configuration file to be copied and customised can be found in Aircraft/Generic/generic-instrumentation.xml.&lt;br /&gt;
&lt;br /&gt;
===== Common Elements =====&lt;br /&gt;
Instrument Root Path: typically '''/instrumentation/name[number]/''' e.g. '''/instrumentation/adf[1]/''' for the second ADF.&lt;br /&gt;
&lt;br /&gt;
Electric Power Path (where applicable):  typically '''/systems/electrical/outputs/name[number]''' e.g. '''/systems/electrical/outputs/comm[0]''' for the first comm radio.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|name&lt;br /&gt;
|typically used for the instrument's root path  and, where applicable, electric power path&lt;br /&gt;
|-&lt;br /&gt;
|number&lt;br /&gt;
|used to differentiate between multiple objects using the same name. &lt;br /&gt;
|}&lt;br /&gt;
All instruments that inherit '''AbstractInstrument''' additionally accept the following config settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|power-supply&lt;br /&gt;
|custom property to be used as the electric power path&lt;br /&gt;
|-&lt;br /&gt;
|minimum-supply-volts&lt;br /&gt;
|minimum electric voltage at which the instrument works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Instrument Modules ===&lt;br /&gt;
&lt;br /&gt;
====[[ADF|ADF (Automatic Direction Finder)]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/adf.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/adf.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
This instrument simulates an [[ADF|Automatic Direction Finder]] used for navigating using [[NDB|Non-Directional Beacons]].&lt;br /&gt;
&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;adf&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;adf&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/adf&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[Airspeed|Airspeed Indicator]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/airspeed_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/airspeed_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;airspeed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;airspeed-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;total-pressure&amp;gt;/systems/pitot/total-pressure-inhg&amp;lt;/total-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;has-overspeed-indicator&amp;gt;0&amp;lt;/has-overspeed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;pressure-alt-source&amp;gt;/instrumentation/altimeter/pressure-alt-ft&amp;lt;/pressure-alt-source&amp;gt;&lt;br /&gt;
    &amp;lt;ias-limit&amp;gt;248.0&amp;lt;/ias-limit&amp;gt;&lt;br /&gt;
    &amp;lt;mach-limit&amp;gt;0.48&amp;lt;/mach-limit&amp;gt;&lt;br /&gt;
    &amp;lt;alt-threshold&amp;gt;13200&amp;lt;/alt-threshold&amp;gt;&lt;br /&gt;
&amp;lt;/airspeed-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Total Pressure: see [[FGproperties/Systems/Pitot]]&lt;br /&gt;
*Static Pressure: see [[FGproperties/Systems/static]]&lt;br /&gt;
*see also: {{Repo link|repo=fgdata|pre=$FG_ROOT|path=Docs/README.airspeed-indicator}}&lt;br /&gt;
&lt;br /&gt;
====[[Altimeter]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/altimeter.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/altimeter}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;altimeter&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;altimeter&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;quantum&amp;gt;0&amp;lt;/quantum&amp;gt;&lt;br /&gt;
    &amp;lt;tau&amp;gt;0&amp;lt;/tau&amp;gt;&lt;br /&gt;
&amp;lt;/altimeter&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Static Pressure: see [[FGproperties/Systems/static]]&lt;br /&gt;
*Quantum: TODO&lt;br /&gt;
* Tau: TODO&lt;br /&gt;
&lt;br /&gt;
====[[Attitude indicator|Attitude Indicator (suction-powered)]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;attitude-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;attitude-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-vacuum&amp;gt;4.5&amp;lt;/minimum-vacuum&amp;gt;&lt;br /&gt;
    &amp;lt;limits&amp;gt;&lt;br /&gt;
      &amp;lt;spin-thresh&amp;gt;0.8&amp;lt;/spin-thresh&amp;gt; &amp;lt;!-- below this gyro spin, instrument will lag, depending on the pitch/roll config below --&amp;gt;&lt;br /&gt;
      &amp;lt;max-roll-error-deg&amp;gt;40.&amp;lt;/max-roll-error-deg&amp;gt;&lt;br /&gt;
      &amp;lt;max-pitch-error-deg&amp;gt;12.0&amp;lt;/max-pitch-error-deg&amp;gt;&lt;br /&gt;
    &amp;lt;/limits&amp;gt;&lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
&amp;lt;/attitude-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note, the &amp;lt;code&amp;gt;&amp;lt;minimum-vacuum&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;gyro&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;limits&amp;gt;&amp;lt;/code&amp;gt; sections are optional. The defaults given in c++ are for demonstration and not realistic.&lt;br /&gt;
*Suction: see [[Aircraft systems#Vacuum]]&lt;br /&gt;
&lt;br /&gt;
====Attitude Indicator (Electric)====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator_electric.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator_electric.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;attitude-indicator-electric&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;attitude-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- optional configs, given with defaults --&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
        &amp;lt;spin-thresh&amp;gt;0.8&amp;lt;/spin-thresh&amp;gt; &amp;lt;!-- below this gyro spin, instrument will lag, depending on the pitch/roll config below --&amp;gt;&lt;br /&gt;
        &amp;lt;max-roll-error-deg&amp;gt;40.&amp;lt;/max-roll-error-deg&amp;gt;&lt;br /&gt;
        &amp;lt;max-pitch-error-deg&amp;gt;12.0&amp;lt;/max-pitch-error-deg&amp;gt;&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/attitude-indicator-electric&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Clock ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/clock.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/clock.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;clock&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;clock&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/clock&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Comm Radio ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=gitlab|proj=flightgear|repo=flightgear|branch=next|path=src/Instrumentation/commradio.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=gitlab|proj=flightgear|repo=flightgear|branch=next|path=src/Instrumentation/commradio.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=gitlab|proj=flightgear|repo=flightgear|branch=next|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;comm-radio&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;comm&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;eight-point-three&amp;gt;0&amp;lt;/eight-point-three&amp;gt;&lt;br /&gt;
    &amp;lt;full-duplex&amp;gt;0&amp;lt;/full-duplex&amp;gt;&lt;br /&gt;
&amp;lt;/comm-radio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eight-point-three&amp;lt;/code&amp;gt;: Setting this to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (true) enables a simulation of the newer 8.33 kHz frequency raster&lt;br /&gt;
* &amp;lt;code&amp;gt;full-duplex&amp;lt;/code&amp;gt;: set this to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; to enable full duplex mode. In half-duplex mode, receiving will be disabled if &amp;lt;code&amp;gt;ptt&amp;lt;/code&amp;gt; property is &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. (Introduced in 2024.1 with default=1; after that default=0, so this usually is not needed to be set manually)&lt;br /&gt;
* see also [[Kx165]]&lt;br /&gt;
&lt;br /&gt;
==== DCL GPS ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dclgps.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dclgps.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Information (from Source Code)'''&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
// dclgps.cxx - a class to extend the operation of FG's current GPS&lt;br /&gt;
// code, and provide support for a KLN89-specific instrument.  It&lt;br /&gt;
// is envisioned that eventually this file and class will be split&lt;br /&gt;
// up between current FG code and new KLN89-specific code and removed.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Distance measuring equipment|DME (Distance Measuring Equipment)]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dme.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dme.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dme&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;dme&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/dme&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Global Positioning System|GPS (Global Positioning System)]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gps.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gps.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gps&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;gps&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/gps&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GSDI/GSDA (Ground Speed Drift Angle Indicator) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gsdi.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gsdi.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gsdi&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;gsdi&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/gsdi&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;This instrument configuration is not included in generic-instrumentation.xml. See the [[EC130]] for an aircraft implementing this instrument.&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Directional Gyro|Heading Indicator (Directional Gyro)]] ====&lt;br /&gt;
&lt;br /&gt;
This is a realistic and highly configrable directional gyro based heading indicator. It can be either electrical or&lt;br /&gt;
suction driven and supports the gyro based errors like precession drift and transport wander.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_dg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_dg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Configuration'''&lt;br /&gt;
&lt;br /&gt;
By default, the instrument is electrically driven and powered by '''/systems/electrical/outputs/DG[number]''' (for backwards-compatibility reasons)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Like with most other electrically driven instruments you can explicitely set the power source:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;power-supply&amp;gt;/systems/electrical/outputs/heading-indicator&amp;lt;/power-supply&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-supply-volts&amp;gt;12.0&amp;lt;/minimum-supply-volts&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make it vacuum driven instead:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-vacuum&amp;gt;4.0&amp;lt;/minimum-vacuum&amp;gt;  &amp;lt;!-- from this inHg suction on the spin will reach 100% --&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can optionally configure the instruments error behaviour and limits (to disable, set accordingly).&lt;br /&gt;
The defaults given in c++ are for demonstration and not realistic so these might be better:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;limits&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-limit-rate&amp;gt;11.5&amp;lt;/yaw-limit-rate&amp;gt;       &amp;lt;!-- about 55° bank; +- this yaw rate (deg/s) and the gyro will accumulate errors --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-lower&amp;gt;-0.8&amp;lt;/g-limit-lower&amp;gt;         &amp;lt;!-- exceeding lower G limit makes gyro drag --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-upper&amp;gt;1.8&amp;lt;/g-limit-upper&amp;gt;          &amp;lt;!-- exceeding upper G limit makes gyro drag --&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-error-factor&amp;gt;0.033&amp;lt;/yaw-error-factor&amp;gt;  &amp;lt;!-- how much error out-of-limits yaw-rate (deg/s) will add --&amp;gt;&lt;br /&gt;
      &amp;lt;g-error-factor&amp;gt;0.033&amp;lt;/g-error-factor&amp;gt;      &amp;lt;!-- how much error out-of-limits G-forces will add --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-tumble-factor&amp;gt;1.5&amp;lt;/g-limit-tumble-factor&amp;gt; &amp;lt;!-- exceeding g-limit-upper/lower by this factor will make the gyro tumble --&amp;gt;&lt;br /&gt;
      &amp;lt;g-node&amp;gt;/accelerations/pilot-gdamped&amp;lt;/g-node&amp;gt;  &amp;lt;!-- optionally read the g force for the limits from here --&amp;gt;&lt;br /&gt;
      &amp;lt;g-filter-time&amp;gt;10.0&amp;lt;/g-filter-time&amp;gt;         &amp;lt;!-- damping value for internal g node damping. use 0  to disable --&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-rate-source&amp;gt;/orientation/yaw-rate-degps&amp;lt;/yaw-rate-source&amp;gt; &amp;lt;!-- optional read the yaw-rate from here --&amp;gt;&lt;br /&gt;
    &amp;lt;/limits&amp;gt;&lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;minimum-spin-norm&amp;gt;0.8&amp;lt;/minimum-spin-norm&amp;gt;  &amp;lt;!-- min. spin to not let the gyro lag when changing heading --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
    &amp;lt;heading-source&amp;gt;/orientation/heading-deg&amp;lt;/heading-source&amp;gt; &amp;lt;!-- alternate source for the heading value --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instrument has a built-in damping filter for the g-node, so spikes do not trigger tumbling. If tuning this is not sufficient, you can specify a custom source property.&lt;br /&gt;
&lt;br /&gt;
'''Runtime configuration'''&lt;br /&gt;
The limits and gyro config are exposed to the instruments propoerty tree and can be changed at runtime.&lt;br /&gt;
&lt;br /&gt;
The following proerties are also exposed for runtime configuration:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;caged-flag&amp;lt;/code&amp;gt;&lt;br /&gt;
|Make the gyro caged. Use this to quickly stop tumbling (or prevent it in the first instance).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;align-deg&amp;lt;/code&amp;gt;&lt;br /&gt;
|Should be used by the instruments model to rotate the disc, countering instrument errors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;latitude-nut-setting&amp;lt;/code&amp;gt;&lt;br /&gt;
|Set to the factory setting. At the nut's latitutde (&amp;lt;code&amp;gt;-90&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;) the precession by earths rotation is countered by a small weight on the gimbal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[Avionics and instruments#Directional Gyro|Heading Indicator (Electric Flux-Gate Compass)]]====&lt;br /&gt;
The flux-gate heading indicator always points to magnetic north automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_fg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_fg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-fg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator-fg&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-fg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Powered by '''/systems/electrical/outputs/heading-indicator-fg[number]'''&lt;br /&gt;
&lt;br /&gt;
==== Heading Indicator (Suction-Driven) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading-indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading-indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following proerties are also exposed for runtime configuration:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;offset-deg&amp;lt;/code&amp;gt;&lt;br /&gt;
|Read/write; Gyro drift is reflected in this property, and can be countered by altering the value. If not initialized at instrument init time, will be synced to &amp;quot;/environment/magnetic-variation-deg&amp;quot; automatically.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Note, this is an unrealistic/simple instrument. For better realism options, you should use the &amp;quot;Heading Indicator (Directional Gyro)&amp;quot;, see above.&lt;br /&gt;
&lt;br /&gt;
* Suction: see [[Aircraft systems#Vacuum]]&lt;br /&gt;
&lt;br /&gt;
==== King KR 87 Digital ADF (Automatic Direction Finder) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/kr_87.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/kr_87.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;KR-87&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;kr-87&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/KR-87&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Compass|Magnetic Compass]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mag_compass.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mag_compass.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;magnetic-compass&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;magnetic-compass&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
	&amp;lt;!--	Deviation table, matches deviation table texture	--&amp;gt;&lt;br /&gt;
	&amp;lt;deviation&amp;gt;&lt;br /&gt;
		&amp;lt;table&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;0&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;1&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;30&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;3&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
                        &amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;330&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;-2&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
		&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;/deviation&amp;gt;&lt;br /&gt;
&amp;lt;/magnetic-compass&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Deviation Table: This can be used to simulate [[Avionics and instruments#Magnetic deviation|Magnetic deviation]], e.g. to reflect what's written on a textured deviation card next to the compass. Can also be a property that is beeing read and dynamically calculated (&amp;lt;code&amp;gt;&amp;lt;deviation&amp;gt;/instrumentation/magnetic-compass/deviation-deg&amp;lt;/deviation&amp;gt;&amp;lt;/code&amp;gt;), for example to implement powered avionics influencing the magnetic field.&lt;br /&gt;
&lt;br /&gt;
By default the compass simulates a fixed axis compass disc pitched at 0°. A pitched compass disc has an additional reading error.&lt;br /&gt;
The compass property tree exposes a &amp;lt;code&amp;gt;/instrumentation/magnetic-compass/pitch-offset-deg&amp;lt;/code&amp;gt; prop that can be set to a fixed pitch angle to simulate pitched mounts or manually pitchable compass casings. By dynamically calculating the property, you can offset the plane's &amp;lt;code&amp;gt;/orientation-pitch-deg&amp;lt;/code&amp;gt;, essentially nulling the effect. By adding some filters you can simulate a freely pitchable compass disc for a constrained pitch angle; that is: a compass disc mounted on a pivot-pin bearing (like most modern compasses feature). For an example see the [https://github.com/c172p-team/c172p/blob/a8bc43674af51cfe093c03ae21e2e84467b456fb/Systems/instruments.xml#L599-L802 filter implementation from the C172p].&lt;br /&gt;
&lt;br /&gt;
The instrument exposes &amp;lt;code&amp;gt;pitch-deg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;roll-deg&amp;lt;/code&amp;gt; properties to simulate pitching and rolling of the compass disc based on flight forces and fluid viscosity.&lt;br /&gt;
You can use them in your 3D-models animation configs.&lt;br /&gt;
&lt;br /&gt;
The damping can be adjusted by setting it in the instrumentation.xml config:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fluid-viscosity type=&amp;quot;double&amp;quot;&amp;gt;8.2&amp;lt;/fluid-viscosity&amp;gt;&amp;lt;/code&amp;gt; (8.2 mm²/s is the value of kerosene and should be good in most cases).&lt;br /&gt;
&lt;br /&gt;
==== [[Radio beacons#Marker beacons|Marker Beacon]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/marker_beacon.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/marker_beacon.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;marker-beacon&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;marker-beacon&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/marker-beacon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Ground proximity warning system|MK-VIII]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mk_viii.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mk_viii.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;mk-viii&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;mk-viii&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/mk-viii&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For more information, see [[Ground proximity warning system]].&lt;br /&gt;
&lt;br /&gt;
==== Master Reference Gyro ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mrg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mrg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;master-reference-gyro&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;master-reference-gyro&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/master-reference-gyro&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;for more information, see [https://scottbouch.com/mcfs/lightningt5t55/docs/ap101b-1003-5-6-15a-part1-chap7-al2-nov84-instruments.pdf Lightning T Mk.5 Instruments PDF, p. 4f.]&lt;br /&gt;
&lt;br /&gt;
==== Navigation Radio ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/navradio.cxx}},{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/newnavradio.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/navradio.hxx}},{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/newnavradio.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nav-radio&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;nav&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/nav-radio&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Radar Altimeter ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/rad_alt.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/rad_alt.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;radar-altimeter&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;radar-altimeter&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;update-interval-sec&amp;gt;0.1&amp;lt;/update-interval-sec&amp;gt;&lt;br /&gt;
&amp;lt;/radar-altimeter&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Turn Coordinator|Slip/Skid Ball]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/slip_skid_ball.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/slip_skid_ball.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;slip-skid-ball&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;slip-skid-ball&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/slip-skid-ball&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Tactical Air Navigation|TACAN]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tacan.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tacan.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tacan&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;tacan&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/tacan&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Traffic alert and collision avoidance system|TCAS]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tcas.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tcas.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
For '''configuration''', see [[Traffic alert and collision avoidance system#Instrument List]]&lt;br /&gt;
&lt;br /&gt;
==== [[Transponder]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/transponder.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/transponder.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;transponder&amp;gt;&lt;br /&gt;
    &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;transponder&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number type=&amp;quot;int&amp;quot;&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-supply-volts type=&amp;quot;double&amp;quot;&amp;gt;8.0&amp;lt;/minimum-supply-volts&amp;gt;&lt;br /&gt;
    &amp;lt;mode type=&amp;quot;int&amp;quot;&amp;gt;1&amp;lt;/mode&amp;gt;&lt;br /&gt;
    &amp;lt;auto-ground type=&amp;quot;string&amp;quot;&amp;gt;/gear/gear/wow&amp;lt;/auto-ground&amp;gt;&lt;br /&gt;
    &amp;lt;encoder-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/altimeter&amp;lt;/encoder-path&amp;gt;&lt;br /&gt;
    &amp;lt;airspeed-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/airspeed-indicator/indicated-speed-kt&amp;lt;/airspeed-path&amp;gt;&lt;br /&gt;
    &amp;lt;mach-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/airspeed-indicator/indicated-mach&amp;lt;/mach-path&amp;gt;&lt;br /&gt;
    &amp;lt;kt70-compatibility type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/kt70-compatibility&amp;gt;&lt;br /&gt;
&amp;lt;/transponder&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Mode&lt;br /&gt;
** 0 = Mode A&lt;br /&gt;
** 1 = Mode C&lt;br /&gt;
** 2 = Mode S&lt;br /&gt;
* Auto-Ground: Set property to be used to detect when the ground-bit (mode-S only) should be set&lt;br /&gt;
* Encoder/Airspeed/Mach Path: Set instrument properties to feed the transponder&lt;br /&gt;
* '''for more information, see [[Transponder]].'''&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Turn Coordinator|Turn Indicator]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/turn_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/turn_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;turn-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;turn-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
&amp;lt;/turn-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note, the &amp;lt;code&amp;gt;&amp;lt;gyro&amp;gt;&amp;lt;/code&amp;gt; sections are optional. The defaults given in c++ are for demonstration and not realistic.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Speed Indicator (VSI) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/vertical_speed_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/vertical_speed_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;vertical-speed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;vertical-speed-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
&amp;lt;/vertical-speed-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Static Pressure: see [[FGproperties/Systems/static]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Aircraft_properties_reference/Instrumentation/COMM&amp;diff=141388</id>
		<title>Aircraft properties reference/Instrumentation/COMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Aircraft_properties_reference/Instrumentation/COMM&amp;diff=141388"/>
		<updated>2025-02-19T16:24:51Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Full documentation: [[Aircraft properties reference]]&amp;lt;pre&amp;gt;&lt;br /&gt;
/instrumentation/comm[%d]/add-noise&lt;br /&gt;
/instrumentation/comm[%d]/airport-id&lt;br /&gt;
/instrumentation/comm[%d]/atis&lt;br /&gt;
/instrumentation/comm[%d]/channel-button&lt;br /&gt;
/instrumentation/comm[%d]/chanel-mode-selector&lt;br /&gt;
/instrumentation/comm[%d]/cutoff-signal-quality&lt;br /&gt;
/instrumentation/comm[%d]/frequencies&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/dial-khz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/dial-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-channel&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-channel-width-khz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-mhz-fmt&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-real-frequency-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-channel&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-channel-width-khz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-mhz-fmt&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-real-frequency-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frq-swap-btn&lt;br /&gt;
/instrumentation/comm[%d]/height-above-station-ft&lt;br /&gt;
/instrumentation/comm[%d]/operable&lt;br /&gt;
/instrumentation/comm[%d]/power-btn&lt;br /&gt;
/instrumentation/comm[%d]/ptt&lt;br /&gt;
/instrumentation/comm[%d]/full-duplex&lt;br /&gt;
/instrumentation/comm[%d]/receiving-flag&lt;br /&gt;
/instrumentation/comm[%d]/servicable&lt;br /&gt;
/instrumentation/comm[%d]/signal-quality-norm&lt;br /&gt;
/instrumentation/comm[%d]/slant-distance-m&lt;br /&gt;
/instrumentation/comm[%d]/station-name&lt;br /&gt;
/instrumentation/comm[%d]/station-type&lt;br /&gt;
/instrumentation/comm[%d]/test-btn&lt;br /&gt;
/instrumentation/comm[%d]/track-distance-m&lt;br /&gt;
/instrumentation/comm[%d]/true-bearing-from-deg&lt;br /&gt;
/instrumentation/comm[%d]/true-bearing-to-deg&lt;br /&gt;
/instrumentation/comm[%d]/volume&lt;br /&gt;
/instrumentation/comm[%d]/volume-selected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since FGFS 2024.1 the radios can be configured to be full- or half-duplex. This is done either by runtime setting of the property, or by specifying &amp;lt;full-duplex&amp;gt; in the &amp;lt;comm&amp;gt; section of instrumentation.xml. Half duplex radios will be mute when PTT is on. The new receiving-flag will be false in that case.&lt;br /&gt;
For historic reasons, the full-duplex flag is TRUE in 2024.1, but this default will be changed to half-duplex for subsequent releases.&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Aircraft_properties_reference/Instrumentation/COMM&amp;diff=141387</id>
		<title>Aircraft properties reference/Instrumentation/COMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Aircraft_properties_reference/Instrumentation/COMM&amp;diff=141387"/>
		<updated>2025-02-19T16:21:06Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: Added full-duplex and receiving-flag (see https://gitlab.com/flightgear/flightgear/-/merge_requests/55)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Full documentation: [[Aircraft properties reference]]&amp;lt;pre&amp;gt;&lt;br /&gt;
/instrumentation/comm[%d]/add-noise&lt;br /&gt;
/instrumentation/comm[%d]/airport-id&lt;br /&gt;
/instrumentation/comm[%d]/atis&lt;br /&gt;
/instrumentation/comm[%d]/channel-button&lt;br /&gt;
/instrumentation/comm[%d]/chanel-mode-selector&lt;br /&gt;
/instrumentation/comm[%d]/cutoff-signal-quality&lt;br /&gt;
/instrumentation/comm[%d]/frequencies&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/dial-khz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/dial-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-channel&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-channel-width-khz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-mhz-fmt&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/selected-real-frequency-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-channel&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-channel-width-khz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-mhz-fmt&lt;br /&gt;
/instrumentation/comm[%d]/frequencies/standby-real-frequency-mhz&lt;br /&gt;
/instrumentation/comm[%d]/frq-swap-btn&lt;br /&gt;
/instrumentation/comm[%d]/height-above-station-ft&lt;br /&gt;
/instrumentation/comm[%d]/operable&lt;br /&gt;
/instrumentation/comm[%d]/power-btn&lt;br /&gt;
/instrumentation/comm[%d]/ptt&lt;br /&gt;
/instrumentation/comm[%d]/full-duplex&lt;br /&gt;
/instrumentation/comm[%d]/receiving-flag&lt;br /&gt;
/instrumentation/comm[%d]/servicable&lt;br /&gt;
/instrumentation/comm[%d]/signal-quality-norm&lt;br /&gt;
/instrumentation/comm[%d]/slant-distance-m&lt;br /&gt;
/instrumentation/comm[%d]/station-name&lt;br /&gt;
/instrumentation/comm[%d]/station-type&lt;br /&gt;
/instrumentation/comm[%d]/test-btn&lt;br /&gt;
/instrumentation/comm[%d]/track-distance-m&lt;br /&gt;
/instrumentation/comm[%d]/true-bearing-from-deg&lt;br /&gt;
/instrumentation/comm[%d]/true-bearing-to-deg&lt;br /&gt;
/instrumentation/comm[%d]/volume&lt;br /&gt;
/instrumentation/comm[%d]/volume-selected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141367</id>
		<title>De/FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141367"/>
		<updated>2025-02-15T12:44:45Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Bekannte Inkompatibilitäten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simuliert Funkkommunikation basierend auf der freien VoIP software [https://www.mumble.info/ Mumble]. Es integriert sich vollstädnig mit den Funkgeräten deines Flugzeuges in FlightGear und erlaubt dir, mit anderen Piloten und Fluglotsen auf realistische Weise zu kommunizieren. Dafür simuliert es ein lückenloses Radiowellenspektrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble ist eine Alternative zum altbekannten [[FGCom]] sowie [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend]. &lt;br /&gt;
&lt;br /&gt;
FGCom-mumble nutzt den Pluginmechanismus, der in Mumble 1.4.0 verfügbar wurde und benötigt lediglich ein vorkompiliertes Plugin, das von einem ganz normalen Mumble-Programm geladen wird. Das aktuellste Release kannst du hier herunterladen: https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Server ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
* Der FGCom-mumble test server ist &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Statusseite für diese Instanz, die alle verbundenen Clients anzeigt, ist hier: https://fgcom-dev.hallinger.org/&lt;br /&gt;
* Der mumble-testserver benutzt ein autoerneuerndes SSL-Zertifikat von Lets Encrypt.&lt;br /&gt;
&lt;br /&gt;
== Hauptziele des Projektes ==&lt;br /&gt;
* Bereitstellen von Kommunikation, die sowohl örtlich als auch kanaltechnisch getrennt ist&lt;br /&gt;
* Realistische Funkkommunikation&lt;br /&gt;
* Einfachheit in der Installation und Benutzung&lt;br /&gt;
* Unterstützung für beliebige Frequenzen&lt;br /&gt;
* ATIS Aufnahme und Wiedergabe&lt;br /&gt;
* Zivile Radiostationen sollen unterstützt werden&lt;br /&gt;
* Festnetz/Intercom Unterstützung&lt;br /&gt;
* RDF-Signale für Clients&lt;br /&gt;
* Einfach auf einem Server zu installieren und zu betreieben&lt;br /&gt;
* Unabhängigkeit von Simulatoren wie z.B. Flightgear&lt;br /&gt;
* Fähigkeit, in FlightGear integriert zu werden, mit der Option, weitere Clients und Applikationen zu unterstützen (ATC, aber auch andere Flugsimulatoren)&lt;br /&gt;
* Modularer Aufbau, damit einzelne Komponenten unterschiedlich implementiert werden können und einfache Erweiterbarkeit besteht&lt;br /&gt;
* Gute und vollständige Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Installation and Einrichtung ==&lt;br /&gt;
Die aktuelle Version kann hier heruntergeladen werden: [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] bietet auch eine Debug-Variante an).&lt;br /&gt;
&lt;br /&gt;
Die  [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#installation--einrichtung-des-mumble-plugins README] bietet detaillierte Angaben zur Installation.&lt;br /&gt;
&lt;br /&gt;
Jemand hat sogar ein Video (engl.) von der Installation gemacht! :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* Du brauchst ein installiertes und eingerichtetes Mumble &amp;gt;= 1.4, und dann lade darin das Plugin (unter mumble Einstellungen/plugins)&lt;br /&gt;
* Auf dem Mumbleserver (Version &amp;gt;= 1.4.0) trittst du einem Channel bei, dessen Name mit `fgcom-mumble` beginnt&lt;br /&gt;
* Im FlightGear-Launcher fügst du im Addon-Tab den `fgfs-addon` Ordner der FGCom-Mumble Veröffentlichung hinzu&lt;br /&gt;
* Starte FlightGear und benutze deine Funkgeräte (du funkst mit den ganz normalen FGCom-Tastenkombinationen; siehe unten)&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
FlightGear's FGCom-mumble Protokoll benutzt die normalen FGCom-Tastenkombinationen:&lt;br /&gt;
* Um auf COM1 zu funken, drückst du {{Key press|Space}}. Solange du überträgst, kannst du keine anderen Piloten durch das verwendete Funkgerät hören (diese sind Halbduplexgeräte).&lt;br /&gt;
* COM2 sendet mit {{Key press|Shift|Space}}.&lt;br /&gt;
* Seit FGCom-mumble 1.2.0:&lt;br /&gt;
** Mit COM3 funkst du über {{Key press|Alt|Space}} (früher musstest du ein eigenes Keybind definieren),&lt;br /&gt;
** Intercom sendet in full-duplex mit {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Jedes Funkgerät kann außerdem über die COMBar benutzt werden (öffnen über ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
Um FGCom-mumble ohne FlightGear zu probieren, kannst du auch die im Release mitgelieferte RadioGUI starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deine Installation testen ===&lt;br /&gt;
Als erstes solltest du sicherstellen, dass mumble an Sich gut funktioniert und du gut zu verstehen bist sowie andere gut verstehst.&lt;br /&gt;
Dazu deaktivierst du am Besten das Plugin oder du sprichst mit anderen auf einem Channel, der nicht mit `fgcom-mumble`beginnt.&lt;br /&gt;
&lt;br /&gt;
Das Plugin verändert Mumbles eingehende Audiopakete. Es fügt statisches Rauschen hinzu, das von der simulierten Funksignalstärke abhängt oder hebt den stream sogar auf, wenn der Funksender außerhalb der Reichweite liegt. Ausgehende Audiopakete werden nicht verändert.&lt;br /&gt;
&lt;br /&gt;
Falls der Server es unterstützt, kannst du auch einen traditionellen Echo-Test machen (dazu muss am Server ein `fgcom-recorder-bot` laufen). Funke auf der Frequenz `910.00` MHz und der Recorderbot wird mit der Aufzeichnung beginnen (er schreibt das in den mumble-chat) und nach Abschluss einen bot an deiner Position erzeugen, der das aufgenommene auf der Frequenz wiedergibt. So kannst du dich selbst hören, wie andere dich hören würden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebung ===&lt;br /&gt;
&lt;br /&gt;
Schau bitte in die [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#fehlerbehebung README] des Projekts. Diese hat detaillierte Informationen hierzu.&lt;br /&gt;
&lt;br /&gt;
Solange es nichts grundlegendes mit der Installation zu tun hat, hilft oft auch einfach ein Neustart von Mumble (das Plugin initialisiert sich selbständig frisch).&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität ===&lt;br /&gt;
FGCom-mumble unterstützt grundsätzlich das alte FGCom-UDP-Protokoll und sollte somit kompatibel mit allen clients sein, die dieses verwenden (z.B. ältere ATCpie oder OpenRadar Versionen). Allerdings gibt es auch ein paar Erweiterungen, die mit dem alten Protokoll nicht zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
* FlightGear wird durch ein [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon] unterstützt. Dieses erwartet die Standard-Funkgerätimplementierung (und funktioniert getestet zumindest mit der C172p und der C182S).&lt;br /&gt;
*[[ATC-pie]] hat eine integrierte Unterstützung (prüfe, ob &amp;quot;FGCom-mumble&amp;quot; anstelle von nur &amp;quot;FGCom&amp;quot; in den Einstellungen aktiviert ist).&lt;br /&gt;
*[[OpenRadar]] Unterstützt im Moment nur COM1 ([https://sourceforge.net/p/openradar/tickets/5/ Ticket dazu ist offen]). Für COM2 und weitere musst du entweder separate Mumble-Instanzen öffnen oder FGCom-mumble's RadioGUI zum Funken benutzen.&lt;br /&gt;
:Es gibt eine gepatchte Version von OpenRadar mit integriertem FGCom-mumble sowie 8.33 Channelmodus; verfügbar hier: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
==== Bekannte Inkompatibilitäten ====&lt;br /&gt;
* Das alte FGCom aktiviert sich selbständig, wenn du mit dem Mehrspielernetzwerk verbunden bist und dann die &amp;quot;FGCom&amp;quot;-Einstellungen (anstelle des &amp;quot;FGCm-Mumble&amp;quot;-Eintrags) aus dem Mehrspielermenü aufrufst. Wenn du mit aktiviertem alten FGCom PTT aktivierst, kann FlightGear abstürzen.&lt;br /&gt;
* Das FlightGear UFO belegt {{Key press|Space}} selbst, sodass du nicht Funken kannst. Als workaround kannst du die COMBar benutzen, die mit dem FGFS Addon mitkommt.&lt;br /&gt;
* FGFS version &amp;lt;= 2020.3 ist nicht mit FGCom-mumble addon version &amp;gt;= 1.3.0 kompatibel. Es wird 1.2.0 benötigt.&lt;br /&gt;
&lt;br /&gt;
== RadioGUI ==&lt;br /&gt;
Die RadioGUI ist eine kleine Java8 Applikation, die einen FGCom-mumble client implementiert und Funkgeräte bereitstellt. Sie sendet die notwendigen UDP Nachrichten an das Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
In der GUI kannst du deinen Standort über eine Karte auswählen und dann deine Funkgeräte einstellen und testen.&lt;br /&gt;
Damit kannst du auch komplett mit allen Funktionen am simulierten Funknetz teilnehmen, ohne FlightGear zu starten.&lt;br /&gt;
&lt;br /&gt;
== Serverseite ==&lt;br /&gt;
Konzeptionell benötigst du als Minimum einfach einen Standard Mumbleserver (Version 1.4.0 oder höher), auf dem ein Channel eingerichtet wird, der mit `fgcom-mumble` beginnt. Das ist bereits genug, damit das Plugin Clientseitig den Rest erledigen kann. Der komplette Channel wird als einzelnes, weltumspannendes, kontinuierliches Radiowellenspektrum behandelt.&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen werden über Lua-Bots implementiert (die auch auf einer anderen Maschine laufen können):&lt;br /&gt;
* ATIS Aufzeichnung udn Wiedergabe&lt;br /&gt;
* Radioprogramm Wiedergabe (OGG Wiedergabe auf einer beliebigen Funkfrequenz), z.B. nutzbar für eigene NDBs mit Morsecode ([https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons])&lt;br /&gt;
* Statusseite Datensammlung&lt;br /&gt;
&lt;br /&gt;
Eine Statusseite fürs WWW ist als PHP-Seite implementiert, die die notwendigen Daten über den `fgcom-status-bot` bereitgestellt bekommt.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Installations- und Betriebsdokumentation ist in den Veröffentlichungen enthalten, aber auch [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server-de_DE.md online] im Projekt zugänglich.&lt;br /&gt;
&lt;br /&gt;
== Wie funktiooniert das alles? (technische Information) ==&lt;br /&gt;
Die technischen Details sind in den verschiedenen Readme-Dateien im Projekt dargelegt (zum Start empfielt sich [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst treten alle Teilnehmer einem einzigen Mumble-Channel bei und laden das fgcom-mumble Plugin. Das Plugin tauscht alle notwendigen Daten zwischen den Nutzern aus (Funkgeräte, Frequenzen, Standort, etc.) und basierend auf diesen Informationen werden die eingehenden Audioströme der anderen Nutzer entweder abgespielt oder stummgeschaltet. Für mehr Realismus werden abgespielte Audioströme mit Statischem Rauschen und weiteren Effekten unterlegt.&lt;br /&gt;
Aufgrund der Stummschaltefunktion abhängig von der Funkreichweite besteht eine unmittelbare Separierung nach Funkkanal und Standort, was allen Nutzern erlaubt, in ein und demselben Mumblekanal zu sein.&lt;br /&gt;
&lt;br /&gt;
== Weiterführender Inhalt ==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] mit weiteren Tipps/Hinweisen&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md FGCom-mumble README-de_DE.md] Haupt-Readme des Projektes mit allen Details, die du schon immer wissen wolltest&lt;br /&gt;
&lt;br /&gt;
=== Forum topic ===&lt;br /&gt;
* Der {{forum link|t=37644|title=FGCom-mumble}} Forumshtread hat Entwicklungsrelevante Informationen und dient zur allgemeinen Diskussion&lt;br /&gt;
* {{forum link|p=374950|title=Re: EDDF-Triangle}} und {{forum link|p=374970|title=Re: EDDF-Triangle}} - behandeln Details zu Kompatibilität und Unterschieden zwischen FGCom, FGCom-mumble und Mumble&lt;br /&gt;
&lt;br /&gt;
=== FlightGear Newsletter ===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: Erster Prototyp angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Lasttests erfolgreich, RDF implementiert, Live-Status Seite hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: Mehr tests, neue HF/VHF/UHF modelle, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API änderungen, verteilte Installation, Konfigurationsmöglichkeit per INI-Datei, Statistiken&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: Weitere API änderungen, realistische Simulation der 8.33kHz/25kHz Kanalüberlappung, RadiGUI hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringt Netzwerkfunktionen&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF Implementierung umgebaut, 0.12.0 angekündigt, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Bessere Unterstützung von Airliners, 0.13.0 and 0.14.0 angekündigt, Releasepaket neustrukturiert&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 angekündigt, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 angekündigt, updater bugfixes Teil II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 veröffentlicht, Mumble 1.4 wurde veröffentlicht'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[en:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141366</id>
		<title>FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141366"/>
		<updated>2025-02-15T12:44:10Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Compatibility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simulates radio communication based on the VoIP software [https://www.mumble.info/ Mumble]. It integrates fully with the radio stack of your FlightGear plane, allowing you to communicate with other pilots and airspace controllers during your flight. It simulates a global, continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble is an alternative to the already known [[FGCom]] client and [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend].&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble leverages the plugin mechanism introduced by Mumble 1.4.0 and just needs a precompiled plugin loaded by a stock Mumble client.&lt;br /&gt;
You can download the latest release from https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Servers ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
*The main FGCom-mumble test server is &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
*The status page for that service showing all connected clients is at: https://fgcom-dev.hallinger.org/&lt;br /&gt;
*The mumble test server uses a autorenewed certificate from letsencrypt.&lt;br /&gt;
&lt;br /&gt;
==Project main goals==&lt;br /&gt;
*Provide communication with geographic and channel separation&lt;br /&gt;
*Provide a realistic radio simulation&lt;br /&gt;
*Ease of use for the end user/pilot&lt;br /&gt;
*Arbitrary frequency support&lt;br /&gt;
*ATIS recording and playback&lt;br /&gt;
*Radio station broadcast support&lt;br /&gt;
*Landline/Intercom support&lt;br /&gt;
*RDF detection for clients&lt;br /&gt;
*Ease of server side installation and operation&lt;br /&gt;
*Standalone nature (no dependency on FlightGear)&lt;br /&gt;
* Capability to be integrated into FlightGear, with the option to support third party applications (ATC, but also other flight simulators)&lt;br /&gt;
*Modularity, so individual component implementations can be switched and its easy to add features&lt;br /&gt;
*Good and complete documentation&lt;br /&gt;
&lt;br /&gt;
== Installation and setup==&lt;br /&gt;
The latest release can be fetched from [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] also has debug versions).&lt;br /&gt;
&lt;br /&gt;
The provided [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#install--setup-for-the-client README] has detailed instructions on the needed prerequisites and installation procedures.&lt;br /&gt;
&lt;br /&gt;
Someone even made an install video :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
(thanks mate, well done! however HF is actually simulated already :)&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
* Have a stock Mumble client &amp;gt;= 1.4 running, and load the plugin (mumble settings/plugins page)&lt;br /&gt;
* Join a channel named `fgcom-mumble` (on a &amp;gt;= 1.4 mumble server)&lt;br /&gt;
* Add the `fgfs-addon` folder of the client release as FlightGear Addon in your launcher&lt;br /&gt;
* Start FlightGear and use your plane's radio stack (it uses default FGCom buttons, see below)&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
FlightGear's FGCom-mumble protocol uses the default FGCom buttons:&lt;br /&gt;
* When you want to talk on COM1 you have to press {{Key press|Space}}. While transmitting you can not hear other pilots trough the used radio (they are half-duplex).&lt;br /&gt;
* You can also talk on COM2 by pressing {{Key press|Shift|Space}}.&lt;br /&gt;
* since FGCom-mumble 1.2.0:&lt;br /&gt;
** For COM3 you use {{Key press|Alt|Space}} (previously you need to define a custom keybind),&lt;br /&gt;
** Intercom is available in full-duplex with {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Any radio can also accessed by the COMBar (open from ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
If you want to try it out without FlightGear, you can also start the supplied RadioGUI.&lt;br /&gt;
&lt;br /&gt;
=== How to test your setup?===&lt;br /&gt;
First, make sure Mumble is working reliably by talking to other people. Either disable the plugin, or be sure you are outside any radio channel (starting with `fgcom-mumble`).&lt;br /&gt;
&lt;br /&gt;
The plugin alters Mumble's receiving audio stream. It adds static noise depending on the radio signal quality, or cancels out all audio when not in range. The outgoing audio stream is not altered in any way.&lt;br /&gt;
&lt;br /&gt;
If the server supports it (in essence there is a bot-manager running and a `fgcom-recorder-bot` listening) you may do a traditional echo test by tuning `910.00` and start to talk. The recorder-bot will record that (he writes that into mumbles chat) and spawn an echo bot at your position, replaying your message (so you will hear yourself like others will hear you).&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
For troubleshooting, refer to the projects [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#troubleshooting README] as it has further suggestions.&lt;br /&gt;
&lt;br /&gt;
If it's nothing setup related, an easy fix is to just restart mumble (the plugin will reinitialize itself).&lt;br /&gt;
&lt;br /&gt;
===Compatibility ===&lt;br /&gt;
FGCom-mumble supports the legacy FGCom UDP protocol and thus should be compatible to clients supporting that. However, it also features some new UDP fields.&lt;br /&gt;
&lt;br /&gt;
*FlightGear is supported through an [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon]. This assumes the default radio implementation and works with at least the C172P and the C182S.&lt;br /&gt;
*[[ATC-pie]] has built in support already (be sure to activate &amp;quot;FGCom-mumble&amp;quot; instead of just &amp;quot;FGCom&amp;quot; in the settings).&lt;br /&gt;
*[[OpenRadar]] currently supports just COM1 ([https://sourceforge.net/p/openradar/tickets/5/ ticket pending]). To use COM2 and more, you need to either start several mumble instances, or use FGCom-mumble's RadioGUI.&lt;br /&gt;
:There is a patched version of OpenRadar with FGCom-mumble and  8.33 channel tuning support available here: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
====Known incompatibilities====&lt;br /&gt;
* The legacy FGCom auto-enables itself, if you are connected to a multiplayer server and then open the &amp;quot;FGCom&amp;quot; dialog (instead of the &amp;quot;FGCom-mumble&amp;quot; one) from the multiplayer dialog. Then activating PTT can cause a FlightGear segfault. &lt;br /&gt;
* The UFO aircraft rebinds {{Key press|Space}} so you can't transmit on the radio. As a workaround you can use the COMBar that comes integrated with the FGFS addon.&lt;br /&gt;
* FGFS version &amp;lt;= 2020.3 is not compatible with FGCom-mumble addon versions &amp;gt;= 1.3.0. You need to stick to 1.2.0.&lt;br /&gt;
&lt;br /&gt;
==RadioGUI==&lt;br /&gt;
The FGCom-mumble RadioGUI is a small Java 8 application that can send the FGCom-mumble UDP messages to the Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
Inside the GUI, you can pick your location from a map and then setup and use your radio stack.&lt;br /&gt;
That said, the RadiGUI can be used instead (or additionally to) FGFS to participate on the simulated radio net.&lt;br /&gt;
&lt;br /&gt;
==Server side==&lt;br /&gt;
By design, all that is needed is a standard Murmur server (version 1.4.0 or later) and a specially named channel (it has to start with `fgcom-mumble`). This is enough to let the plugin do its work. The entire channel is treated as a single, worldwide continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
Additional features are implemented using server side Lua bots (which may run somewhere else):&lt;br /&gt;
* ATIS recording and broadcasting&lt;br /&gt;
* Radio program broadcasting (OGG playback on a frequency), [https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons] &lt;br /&gt;
* Status page data collection&lt;br /&gt;
&lt;br /&gt;
A status page showing client details is available as a PHP website, that gets its data fed from the fgcom-status-bot.&lt;br /&gt;
&lt;br /&gt;
Detailed installation and operation documentation is shipped with the releases, but is also [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server.md online].&lt;br /&gt;
&lt;br /&gt;
==How does it work? (technical information)==&lt;br /&gt;
The technical details are specified and described in the various readme files of the projects source code (as a starter read the [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Basicly, all users join the same mumble channel and run the fgcom-mumble plugin. The plugin knows everything necessary from the participating users (like radios used, frequencies tuned, locations, etc) and based on that information mutes or plays incoming voice messages from the other users. Based on signal quality, static noise is mixed in for more fun and a more realistic experience.&lt;br /&gt;
Because the voice of other users is muted, it is a design wise out-of-the-box feature that brings frequency and location separation but allows everyone to stay in the same mumble channel.&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] with hints etc&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README.md FGCom-mumble README.md] Main readme of the project bringing all the details you always wanted to know&lt;br /&gt;
&lt;br /&gt;
===Forum topic===&lt;br /&gt;
*The {{forum link|t=37644|title=FGCom-mumble}} has development discussions and release announcements&lt;br /&gt;
*{{forum link|p=374950|title=Re: EDDF-Triangle}} and  {{forum link|p=374970|title=Re: EDDF-Triangle}} - Compatibility and differences between FGCom, FGCom-mumble and Mumble&lt;br /&gt;
&lt;br /&gt;
===FlightGear Newsletter===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: First prototype announced&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Load tests successful, RDF implemented, Live-Status page added&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: More testing, new HF/VHF/UHF models, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API changes, distributed deployment, configuration trough INI, statistics&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: More API changes, proper 8.33kHz/25kHz overlap, RadiGUI added&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server announced&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringing networking capability&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF reworked, 0.12.0 announced, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Better airliner support, announced 0.13.0 and 0.14.0, restructured release package structure&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 announced, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 announced, updater bugfixes part II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 released, Mumble 1.4 hit the light'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea to integrate into FGFS ==&lt;br /&gt;
{{progressbar|10|10}} {{pending}}&lt;br /&gt;
&lt;br /&gt;
ML Discussion: https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1919A28D-44D8-46F0-8A65-A5633A8AB743%40hallinger.org/#msg58717212&lt;br /&gt;
&lt;br /&gt;
Using [https://github.com/mumble-voip/libmumble libmumble], a standalone mumble c++17 library, we could integrate FGCom-mumble directly into FlightGear. This way, FGFS would talk &amp;quot;mumble&amp;quot; to a mumble server and the plugins functions would be integrated into the core. For pilots, a simple &amp;quot;click&amp;quot; to connect in the multiplayer would be enough to participate, while having all the advanced features of fgcom-mumble available (like custom NDBs, radio stations; as well as the possibility for other clients (ATC!) to participate easily on the radio spectrum).&lt;br /&gt;
&lt;br /&gt;
A main idea is also to use the existing fgcom-mumble code to avoid double work. But otoh maybe a direct rewrite of the core stuff may be cleaner; most of the magic is in the fgcom-mumble radio model code anyway, so we might just use some bits, if that is possible?&lt;br /&gt;
&lt;br /&gt;
libmubmble is not yet API-stable (but should be working), but there was already a [https://github.com/mumble-voip/libmumble/issues/18 first dicussion] about feasability and basic mechanics:&lt;br /&gt;
* From FGCom-mumbles side, we need to integrate the data structures into the core. So radios need to be registered, etc. This should not be too hard&lt;br /&gt;
** we probably just need to not run the UPD-Server but send the needed data directly into the decoding function of it. At a later stage, we might better integrate that part, but for a first working solution, just creatig a FCGOM-mumble UDP-Packet string in FGFS and sending it periodically (or already on-demand?) into the udp-servers decoder function should be enough - it just creates some CPU overhead which should not be too bad and will establish the needed local data structure.&lt;br /&gt;
** Note, that we cannot rely on the mpservers data structures (even if there is radio data), because in FGCom-mumble potential other clients are also participating (like radio-playback bots for ATIS etc!). So we really need to use mumbles plugin messages.&lt;br /&gt;
* Basicly the libmumble will run its own threads for networking. Upon receiving mumble audio or mumble-plugin data, callback functions would be called from the lib (https://github.com/mumble-voip/libmumble/issues/18#issuecomment-1868498537):&lt;br /&gt;
** Incoming audio data need to be processed by the fgcom-mumble plugin functions, and then the result handed over into fgfs audio out handling.&lt;br /&gt;
** Incoming plugin data needs to be fed into the fgcom-mumble internal remote data struct (just hand the data into the existing data parser).&lt;br /&gt;
* Pressing the already existing fgfs PTT button&lt;br /&gt;
** would need to send plugin data to mumble, to inform other clients. This is currently done by calling a mumble client function. It would probably be enough, if fgfs core supplied an implemention that calls the appropriate libmumble function and hands over the data.&lt;br /&gt;
** also, the audio data needs to be fetched from the mic, and then handed over to libmumbles audio encoding and sending routine. This probably can somewhat be partly copied from the legacy fgcom implementation.&lt;br /&gt;
* Questions regarding fgfs currently are:&lt;br /&gt;
** {{tick}} (''Answer:'' use [[Howto:Create_new_subsystems|Subsystem]]) how to exactly the integration on fgfs side works. That needs peeks on fgcoms code as well as some discussion at the mailing list.&lt;br /&gt;
** how to integrate the libmubmle code into the fgfs build chain (its cmake).&lt;br /&gt;
*** {{tick}} legally: libmubmle has a [https://github.com/mumble-voip/libmumble/blob/master/LICENSE BSD 3-clause] licence, is that compatible?&lt;br /&gt;
*** {{tick}} And what about libmubmles dependencies, like OpenSSL?&lt;br /&gt;
*** technically, how to include that all into the existing build system?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[de:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141327</id>
		<title>De/FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141327"/>
		<updated>2025-02-08T17:48:59Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Bekannte Inkompatibilitäten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simuliert Funkkommunikation basierend auf der freien VoIP software [https://www.mumble.info/ Mumble]. Es integriert sich vollstädnig mit den Funkgeräten deines Flugzeuges in FlightGear und erlaubt dir, mit anderen Piloten und Fluglotsen auf realistische Weise zu kommunizieren. Dafür simuliert es ein lückenloses Radiowellenspektrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble ist eine Alternative zum altbekannten [[FGCom]] sowie [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend]. &lt;br /&gt;
&lt;br /&gt;
FGCom-mumble nutzt den Pluginmechanismus, der in Mumble 1.4.0 verfügbar wurde und benötigt lediglich ein vorkompiliertes Plugin, das von einem ganz normalen Mumble-Programm geladen wird. Das aktuellste Release kannst du hier herunterladen: https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Server ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
* Der FGCom-mumble test server ist &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Statusseite für diese Instanz, die alle verbundenen Clients anzeigt, ist hier: https://fgcom-dev.hallinger.org/&lt;br /&gt;
* Der mumble-testserver benutzt ein autoerneuerndes SSL-Zertifikat von Lets Encrypt.&lt;br /&gt;
&lt;br /&gt;
== Hauptziele des Projektes ==&lt;br /&gt;
* Bereitstellen von Kommunikation, die sowohl örtlich als auch kanaltechnisch getrennt ist&lt;br /&gt;
* Realistische Funkkommunikation&lt;br /&gt;
* Einfachheit in der Installation und Benutzung&lt;br /&gt;
* Unterstützung für beliebige Frequenzen&lt;br /&gt;
* ATIS Aufnahme und Wiedergabe&lt;br /&gt;
* Zivile Radiostationen sollen unterstützt werden&lt;br /&gt;
* Festnetz/Intercom Unterstützung&lt;br /&gt;
* RDF-Signale für Clients&lt;br /&gt;
* Einfach auf einem Server zu installieren und zu betreieben&lt;br /&gt;
* Unabhängigkeit von Simulatoren wie z.B. Flightgear&lt;br /&gt;
* Fähigkeit, in FlightGear integriert zu werden, mit der Option, weitere Clients und Applikationen zu unterstützen (ATC, aber auch andere Flugsimulatoren)&lt;br /&gt;
* Modularer Aufbau, damit einzelne Komponenten unterschiedlich implementiert werden können und einfache Erweiterbarkeit besteht&lt;br /&gt;
* Gute und vollständige Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Installation and Einrichtung ==&lt;br /&gt;
Die aktuelle Version kann hier heruntergeladen werden: [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] bietet auch eine Debug-Variante an).&lt;br /&gt;
&lt;br /&gt;
Die  [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#installation--einrichtung-des-mumble-plugins README] bietet detaillierte Angaben zur Installation.&lt;br /&gt;
&lt;br /&gt;
Jemand hat sogar ein Video (engl.) von der Installation gemacht! :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* Du brauchst ein installiertes und eingerichtetes Mumble &amp;gt;= 1.4, und dann lade darin das Plugin (unter mumble Einstellungen/plugins)&lt;br /&gt;
* Auf dem Mumbleserver (Version &amp;gt;= 1.4.0) trittst du einem Channel bei, dessen Name mit `fgcom-mumble` beginnt&lt;br /&gt;
* Im FlightGear-Launcher fügst du im Addon-Tab den `fgfs-addon` Ordner der FGCom-Mumble Veröffentlichung hinzu&lt;br /&gt;
* Starte FlightGear und benutze deine Funkgeräte (du funkst mit den ganz normalen FGCom-Tastenkombinationen; siehe unten)&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
FlightGear's FGCom-mumble Protokoll benutzt die normalen FGCom-Tastenkombinationen:&lt;br /&gt;
* Um auf COM1 zu funken, drückst du {{Key press|Space}}. Solange du überträgst, kannst du keine anderen Piloten durch das verwendete Funkgerät hören (diese sind Halbduplexgeräte).&lt;br /&gt;
* COM2 sendet mit {{Key press|Shift|Space}}.&lt;br /&gt;
* Seit FGCom-mumble 1.2.0:&lt;br /&gt;
** Mit COM3 funkst du über {{Key press|Alt|Space}} (früher musstest du ein eigenes Keybind definieren),&lt;br /&gt;
** Intercom sendet in full-duplex mit {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Jedes Funkgerät kann außerdem über die COMBar benutzt werden (öffnen über ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
Um FGCom-mumble ohne FlightGear zu probieren, kannst du auch die im Release mitgelieferte RadioGUI starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deine Installation testen ===&lt;br /&gt;
Als erstes solltest du sicherstellen, dass mumble an Sich gut funktioniert und du gut zu verstehen bist sowie andere gut verstehst.&lt;br /&gt;
Dazu deaktivierst du am Besten das Plugin oder du sprichst mit anderen auf einem Channel, der nicht mit `fgcom-mumble`beginnt.&lt;br /&gt;
&lt;br /&gt;
Das Plugin verändert Mumbles eingehende Audiopakete. Es fügt statisches Rauschen hinzu, das von der simulierten Funksignalstärke abhängt oder hebt den stream sogar auf, wenn der Funksender außerhalb der Reichweite liegt. Ausgehende Audiopakete werden nicht verändert.&lt;br /&gt;
&lt;br /&gt;
Falls der Server es unterstützt, kannst du auch einen traditionellen Echo-Test machen (dazu muss am Server ein `fgcom-recorder-bot` laufen). Funke auf der Frequenz `910.00` MHz und der Recorderbot wird mit der Aufzeichnung beginnen (er schreibt das in den mumble-chat) und nach Abschluss einen bot an deiner Position erzeugen, der das aufgenommene auf der Frequenz wiedergibt. So kannst du dich selbst hören, wie andere dich hören würden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebung ===&lt;br /&gt;
&lt;br /&gt;
Schau bitte in die [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#fehlerbehebung README] des Projekts. Diese hat detaillierte Informationen hierzu.&lt;br /&gt;
&lt;br /&gt;
Solange es nichts grundlegendes mit der Installation zu tun hat, hilft oft auch einfach ein Neustart von Mumble (das Plugin initialisiert sich selbständig frisch).&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität ===&lt;br /&gt;
FGCom-mumble unterstützt grundsätzlich das alte FGCom-UDP-Protokoll und sollte somit kompatibel mit allen clients sein, die dieses verwenden (z.B. ältere ATCpie oder OpenRadar Versionen). Allerdings gibt es auch ein paar Erweiterungen, die mit dem alten Protokoll nicht zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
* FlightGear wird durch ein [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon] unterstützt. Dieses erwartet die Standard-Funkgerätimplementierung (und funktioniert getestet zumindest mit der C172p und der C182S).&lt;br /&gt;
*[[ATC-pie]] hat eine integrierte Unterstützung (prüfe, ob &amp;quot;FGCom-mumble&amp;quot; anstelle von nur &amp;quot;FGCom&amp;quot; in den Einstellungen aktiviert ist).&lt;br /&gt;
*[[OpenRadar]] Unterstützt im Moment nur COM1 ([https://sourceforge.net/p/openradar/tickets/5/ Ticket dazu ist offen]). Für COM2 und weitere musst du entweder separate Mumble-Instanzen öffnen oder FGCom-mumble's RadioGUI zum Funken benutzen.&lt;br /&gt;
:Es gibt eine gepatchte Version von OpenRadar mit integriertem FGCom-mumble sowie 8.33 Channelmodus; verfügbar hier: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
==== Bekannte Inkompatibilitäten ====&lt;br /&gt;
* Das alte FGCom aktiviert sich selbständig, wenn du mit dem Mehrspielernetzwerk verbunden bist und dann die &amp;quot;FGCom&amp;quot;-Einstellungen (anstelle des &amp;quot;FGCm-Mumble&amp;quot;-Eintrags) aus dem Mehrspielermenü aufrufst. Wenn du mit aktiviertem alten FGCom PTT aktivierst, kann FlightGear abstürzen.&lt;br /&gt;
* Das FlightGear UFO belegt {{Key press|Space}} selbst, sodass du nicht Funken kannst. Als workaround kannst du die COMBar benutzen, die mit dem FGFS Addon mitkommt.&lt;br /&gt;
&lt;br /&gt;
== RadioGUI ==&lt;br /&gt;
Die RadioGUI ist eine kleine Java8 Applikation, die einen FGCom-mumble client implementiert und Funkgeräte bereitstellt. Sie sendet die notwendigen UDP Nachrichten an das Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
In der GUI kannst du deinen Standort über eine Karte auswählen und dann deine Funkgeräte einstellen und testen.&lt;br /&gt;
Damit kannst du auch komplett mit allen Funktionen am simulierten Funknetz teilnehmen, ohne FlightGear zu starten.&lt;br /&gt;
&lt;br /&gt;
== Serverseite ==&lt;br /&gt;
Konzeptionell benötigst du als Minimum einfach einen Standard Mumbleserver (Version 1.4.0 oder höher), auf dem ein Channel eingerichtet wird, der mit `fgcom-mumble` beginnt. Das ist bereits genug, damit das Plugin Clientseitig den Rest erledigen kann. Der komplette Channel wird als einzelnes, weltumspannendes, kontinuierliches Radiowellenspektrum behandelt.&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen werden über Lua-Bots implementiert (die auch auf einer anderen Maschine laufen können):&lt;br /&gt;
* ATIS Aufzeichnung udn Wiedergabe&lt;br /&gt;
* Radioprogramm Wiedergabe (OGG Wiedergabe auf einer beliebigen Funkfrequenz), z.B. nutzbar für eigene NDBs mit Morsecode ([https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons])&lt;br /&gt;
* Statusseite Datensammlung&lt;br /&gt;
&lt;br /&gt;
Eine Statusseite fürs WWW ist als PHP-Seite implementiert, die die notwendigen Daten über den `fgcom-status-bot` bereitgestellt bekommt.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Installations- und Betriebsdokumentation ist in den Veröffentlichungen enthalten, aber auch [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server-de_DE.md online] im Projekt zugänglich.&lt;br /&gt;
&lt;br /&gt;
== Wie funktiooniert das alles? (technische Information) ==&lt;br /&gt;
Die technischen Details sind in den verschiedenen Readme-Dateien im Projekt dargelegt (zum Start empfielt sich [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst treten alle Teilnehmer einem einzigen Mumble-Channel bei und laden das fgcom-mumble Plugin. Das Plugin tauscht alle notwendigen Daten zwischen den Nutzern aus (Funkgeräte, Frequenzen, Standort, etc.) und basierend auf diesen Informationen werden die eingehenden Audioströme der anderen Nutzer entweder abgespielt oder stummgeschaltet. Für mehr Realismus werden abgespielte Audioströme mit Statischem Rauschen und weiteren Effekten unterlegt.&lt;br /&gt;
Aufgrund der Stummschaltefunktion abhängig von der Funkreichweite besteht eine unmittelbare Separierung nach Funkkanal und Standort, was allen Nutzern erlaubt, in ein und demselben Mumblekanal zu sein.&lt;br /&gt;
&lt;br /&gt;
== Weiterführender Inhalt ==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] mit weiteren Tipps/Hinweisen&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md FGCom-mumble README-de_DE.md] Haupt-Readme des Projektes mit allen Details, die du schon immer wissen wolltest&lt;br /&gt;
&lt;br /&gt;
=== Forum topic ===&lt;br /&gt;
* Der {{forum link|t=37644|title=FGCom-mumble}} Forumshtread hat Entwicklungsrelevante Informationen und dient zur allgemeinen Diskussion&lt;br /&gt;
* {{forum link|p=374950|title=Re: EDDF-Triangle}} und {{forum link|p=374970|title=Re: EDDF-Triangle}} - behandeln Details zu Kompatibilität und Unterschieden zwischen FGCom, FGCom-mumble und Mumble&lt;br /&gt;
&lt;br /&gt;
=== FlightGear Newsletter ===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: Erster Prototyp angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Lasttests erfolgreich, RDF implementiert, Live-Status Seite hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: Mehr tests, neue HF/VHF/UHF modelle, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API änderungen, verteilte Installation, Konfigurationsmöglichkeit per INI-Datei, Statistiken&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: Weitere API änderungen, realistische Simulation der 8.33kHz/25kHz Kanalüberlappung, RadiGUI hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringt Netzwerkfunktionen&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF Implementierung umgebaut, 0.12.0 angekündigt, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Bessere Unterstützung von Airliners, 0.13.0 and 0.14.0 angekündigt, Releasepaket neustrukturiert&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 angekündigt, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 angekündigt, updater bugfixes Teil II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 veröffentlicht, Mumble 1.4 wurde veröffentlicht'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[en:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141326</id>
		<title>FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141326"/>
		<updated>2025-02-08T17:47:03Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Known incompatibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simulates radio communication based on the VoIP software [https://www.mumble.info/ Mumble]. It integrates fully with the radio stack of your FlightGear plane, allowing you to communicate with other pilots and airspace controllers during your flight. It simulates a global, continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble is an alternative to the already known [[FGCom]] client and [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend].&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble leverages the plugin mechanism introduced by Mumble 1.4.0 and just needs a precompiled plugin loaded by a stock Mumble client.&lt;br /&gt;
You can download the latest release from https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Servers ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
*The main FGCom-mumble test server is &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
*The status page for that service showing all connected clients is at: https://fgcom-dev.hallinger.org/&lt;br /&gt;
*The mumble test server uses a autorenewed certificate from letsencrypt.&lt;br /&gt;
&lt;br /&gt;
==Project main goals==&lt;br /&gt;
*Provide communication with geographic and channel separation&lt;br /&gt;
*Provide a realistic radio simulation&lt;br /&gt;
*Ease of use for the end user/pilot&lt;br /&gt;
*Arbitrary frequency support&lt;br /&gt;
*ATIS recording and playback&lt;br /&gt;
*Radio station broadcast support&lt;br /&gt;
*Landline/Intercom support&lt;br /&gt;
*RDF detection for clients&lt;br /&gt;
*Ease of server side installation and operation&lt;br /&gt;
*Standalone nature (no dependency on FlightGear)&lt;br /&gt;
* Capability to be integrated into FlightGear, with the option to support third party applications (ATC, but also other flight simulators)&lt;br /&gt;
*Modularity, so individual component implementations can be switched and its easy to add features&lt;br /&gt;
*Good and complete documentation&lt;br /&gt;
&lt;br /&gt;
== Installation and setup==&lt;br /&gt;
The latest release can be fetched from [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] also has debug versions).&lt;br /&gt;
&lt;br /&gt;
The provided [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#install--setup-for-the-client README] has detailed instructions on the needed prerequisites and installation procedures.&lt;br /&gt;
&lt;br /&gt;
Someone even made an install video :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
(thanks mate, well done! however HF is actually simulated already :)&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
* Have a stock Mumble client &amp;gt;= 1.4 running, and load the plugin (mumble settings/plugins page)&lt;br /&gt;
* Join a channel named `fgcom-mumble` (on a &amp;gt;= 1.4 mumble server)&lt;br /&gt;
* Add the `fgfs-addon` folder of the client release as FlightGear Addon in your launcher&lt;br /&gt;
* Start FlightGear and use your plane's radio stack (it uses default FGCom buttons, see below)&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
FlightGear's FGCom-mumble protocol uses the default FGCom buttons:&lt;br /&gt;
* When you want to talk on COM1 you have to press {{Key press|Space}}. While transmitting you can not hear other pilots trough the used radio (they are half-duplex).&lt;br /&gt;
* You can also talk on COM2 by pressing {{Key press|Shift|Space}}.&lt;br /&gt;
* since FGCom-mumble 1.2.0:&lt;br /&gt;
** For COM3 you use {{Key press|Alt|Space}} (previously you need to define a custom keybind),&lt;br /&gt;
** Intercom is available in full-duplex with {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Any radio can also accessed by the COMBar (open from ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
If you want to try it out without FlightGear, you can also start the supplied RadioGUI.&lt;br /&gt;
&lt;br /&gt;
=== How to test your setup?===&lt;br /&gt;
First, make sure Mumble is working reliably by talking to other people. Either disable the plugin, or be sure you are outside any radio channel (starting with `fgcom-mumble`).&lt;br /&gt;
&lt;br /&gt;
The plugin alters Mumble's receiving audio stream. It adds static noise depending on the radio signal quality, or cancels out all audio when not in range. The outgoing audio stream is not altered in any way.&lt;br /&gt;
&lt;br /&gt;
If the server supports it (in essence there is a bot-manager running and a `fgcom-recorder-bot` listening) you may do a traditional echo test by tuning `910.00` and start to talk. The recorder-bot will record that (he writes that into mumbles chat) and spawn an echo bot at your position, replaying your message (so you will hear yourself like others will hear you).&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
For troubleshooting, refer to the projects [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#troubleshooting README] as it has further suggestions.&lt;br /&gt;
&lt;br /&gt;
If it's nothing setup related, an easy fix is to just restart mumble (the plugin will reinitialize itself).&lt;br /&gt;
&lt;br /&gt;
===Compatibility ===&lt;br /&gt;
FGCom-mumble supports the legacy FGCom UDP protocol and thus should be compatible to clients supporting that. However, it also features some new UDP fields.&lt;br /&gt;
&lt;br /&gt;
*FlightGear is supported through an [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon]. This assumes the default radio implementation and works with at least the C172P and the C182S.&lt;br /&gt;
*[[ATC-pie]] has built in support already (be sure to activate &amp;quot;FGCom-mumble&amp;quot; instead of just &amp;quot;FGCom&amp;quot; in the settings).&lt;br /&gt;
*[[OpenRadar]] currently supports just COM1 ([https://sourceforge.net/p/openradar/tickets/5/ ticket pending]). To use COM2 and more, you need to either start several mumble instances, or use FGCom-mumble's RadioGUI.&lt;br /&gt;
:There is a patched version of OpenRadar with FGCom-mumble and  8.33 channel tuning support available here: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
====Known incompatibilities====&lt;br /&gt;
* The legacy FGCom auto-enables itself, if you are connected to a multiplayer server and then open the &amp;quot;FGCom&amp;quot; dialog (instead of the &amp;quot;FGCom-mumble&amp;quot; one) from the multiplayer dialog. Then activating PTT can cause a FlightGear segfault. &lt;br /&gt;
* The UFO aircraft rebinds {{Key press|Space}} so you can't transmit on the radio. As a workaround you can use the COMBar that comes integrated with the FGFS addon.&lt;br /&gt;
&lt;br /&gt;
==RadioGUI==&lt;br /&gt;
The FGCom-mumble RadioGUI is a small Java 8 application that can send the FGCom-mumble UDP messages to the Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
Inside the GUI, you can pick your location from a map and then setup and use your radio stack.&lt;br /&gt;
That said, the RadiGUI can be used instead (or additionally to) FGFS to participate on the simulated radio net.&lt;br /&gt;
&lt;br /&gt;
==Server side==&lt;br /&gt;
By design, all that is needed is a standard Murmur server (version 1.4.0 or later) and a specially named channel (it has to start with `fgcom-mumble`). This is enough to let the plugin do its work. The entire channel is treated as a single, worldwide continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
Additional features are implemented using server side Lua bots (which may run somewhere else):&lt;br /&gt;
* ATIS recording and broadcasting&lt;br /&gt;
* Radio program broadcasting (OGG playback on a frequency), [https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons] &lt;br /&gt;
* Status page data collection&lt;br /&gt;
&lt;br /&gt;
A status page showing client details is available as a PHP website, that gets its data fed from the fgcom-status-bot.&lt;br /&gt;
&lt;br /&gt;
Detailed installation and operation documentation is shipped with the releases, but is also [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server.md online].&lt;br /&gt;
&lt;br /&gt;
==How does it work? (technical information)==&lt;br /&gt;
The technical details are specified and described in the various readme files of the projects source code (as a starter read the [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Basicly, all users join the same mumble channel and run the fgcom-mumble plugin. The plugin knows everything necessary from the participating users (like radios used, frequencies tuned, locations, etc) and based on that information mutes or plays incoming voice messages from the other users. Based on signal quality, static noise is mixed in for more fun and a more realistic experience.&lt;br /&gt;
Because the voice of other users is muted, it is a design wise out-of-the-box feature that brings frequency and location separation but allows everyone to stay in the same mumble channel.&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] with hints etc&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README.md FGCom-mumble README.md] Main readme of the project bringing all the details you always wanted to know&lt;br /&gt;
&lt;br /&gt;
===Forum topic===&lt;br /&gt;
*The {{forum link|t=37644|title=FGCom-mumble}} has development discussions and release announcements&lt;br /&gt;
*{{forum link|p=374950|title=Re: EDDF-Triangle}} and  {{forum link|p=374970|title=Re: EDDF-Triangle}} - Compatibility and differences between FGCom, FGCom-mumble and Mumble&lt;br /&gt;
&lt;br /&gt;
===FlightGear Newsletter===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: First prototype announced&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Load tests successful, RDF implemented, Live-Status page added&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: More testing, new HF/VHF/UHF models, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API changes, distributed deployment, configuration trough INI, statistics&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: More API changes, proper 8.33kHz/25kHz overlap, RadiGUI added&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server announced&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringing networking capability&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF reworked, 0.12.0 announced, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Better airliner support, announced 0.13.0 and 0.14.0, restructured release package structure&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 announced, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 announced, updater bugfixes part II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 released, Mumble 1.4 hit the light'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea to integrate into FGFS ==&lt;br /&gt;
{{progressbar|10|10}} {{pending}}&lt;br /&gt;
&lt;br /&gt;
ML Discussion: https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1919A28D-44D8-46F0-8A65-A5633A8AB743%40hallinger.org/#msg58717212&lt;br /&gt;
&lt;br /&gt;
Using [https://github.com/mumble-voip/libmumble libmumble], a standalone mumble c++17 library, we could integrate FGCom-mumble directly into FlightGear. This way, FGFS would talk &amp;quot;mumble&amp;quot; to a mumble server and the plugins functions would be integrated into the core. For pilots, a simple &amp;quot;click&amp;quot; to connect in the multiplayer would be enough to participate, while having all the advanced features of fgcom-mumble available (like custom NDBs, radio stations; as well as the possibility for other clients (ATC!) to participate easily on the radio spectrum).&lt;br /&gt;
&lt;br /&gt;
A main idea is also to use the existing fgcom-mumble code to avoid double work. But otoh maybe a direct rewrite of the core stuff may be cleaner; most of the magic is in the fgcom-mumble radio model code anyway, so we might just use some bits, if that is possible?&lt;br /&gt;
&lt;br /&gt;
libmubmble is not yet API-stable (but should be working), but there was already a [https://github.com/mumble-voip/libmumble/issues/18 first dicussion] about feasability and basic mechanics:&lt;br /&gt;
* From FGCom-mumbles side, we need to integrate the data structures into the core. So radios need to be registered, etc. This should not be too hard&lt;br /&gt;
** we probably just need to not run the UPD-Server but send the needed data directly into the decoding function of it. At a later stage, we might better integrate that part, but for a first working solution, just creatig a FCGOM-mumble UDP-Packet string in FGFS and sending it periodically (or already on-demand?) into the udp-servers decoder function should be enough - it just creates some CPU overhead which should not be too bad and will establish the needed local data structure.&lt;br /&gt;
** Note, that we cannot rely on the mpservers data structures (even if there is radio data), because in FGCom-mumble potential other clients are also participating (like radio-playback bots for ATIS etc!). So we really need to use mumbles plugin messages.&lt;br /&gt;
* Basicly the libmumble will run its own threads for networking. Upon receiving mumble audio or mumble-plugin data, callback functions would be called from the lib (https://github.com/mumble-voip/libmumble/issues/18#issuecomment-1868498537):&lt;br /&gt;
** Incoming audio data need to be processed by the fgcom-mumble plugin functions, and then the result handed over into fgfs audio out handling.&lt;br /&gt;
** Incoming plugin data needs to be fed into the fgcom-mumble internal remote data struct (just hand the data into the existing data parser).&lt;br /&gt;
* Pressing the already existing fgfs PTT button&lt;br /&gt;
** would need to send plugin data to mumble, to inform other clients. This is currently done by calling a mumble client function. It would probably be enough, if fgfs core supplied an implemention that calls the appropriate libmumble function and hands over the data.&lt;br /&gt;
** also, the audio data needs to be fetched from the mic, and then handed over to libmumbles audio encoding and sending routine. This probably can somewhat be partly copied from the legacy fgcom implementation.&lt;br /&gt;
* Questions regarding fgfs currently are:&lt;br /&gt;
** {{tick}} (''Answer:'' use [[Howto:Create_new_subsystems|Subsystem]]) how to exactly the integration on fgfs side works. That needs peeks on fgcoms code as well as some discussion at the mailing list.&lt;br /&gt;
** how to integrate the libmubmle code into the fgfs build chain (its cmake).&lt;br /&gt;
*** {{tick}} legally: libmubmle has a [https://github.com/mumble-voip/libmumble/blob/master/LICENSE BSD 3-clause] licence, is that compatible?&lt;br /&gt;
*** {{tick}} And what about libmubmles dependencies, like OpenSSL?&lt;br /&gt;
*** technically, how to include that all into the existing build system?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[de:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141296</id>
		<title>De/FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141296"/>
		<updated>2025-02-03T12:08:26Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simuliert Funkkommunikation basierend auf der freien VoIP software [https://www.mumble.info/ Mumble]. Es integriert sich vollstädnig mit den Funkgeräten deines Flugzeuges in FlightGear und erlaubt dir, mit anderen Piloten und Fluglotsen auf realistische Weise zu kommunizieren. Dafür simuliert es ein lückenloses Radiowellenspektrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble ist eine Alternative zum altbekannten [[FGCom]] sowie [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend]. &lt;br /&gt;
&lt;br /&gt;
FGCom-mumble nutzt den Pluginmechanismus, der in Mumble 1.4.0 verfügbar wurde und benötigt lediglich ein vorkompiliertes Plugin, das von einem ganz normalen Mumble-Programm geladen wird. Das aktuellste Release kannst du hier herunterladen: https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Server ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
* Der FGCom-mumble test server ist &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Statusseite für diese Instanz, die alle verbundenen Clients anzeigt, ist hier: https://fgcom-dev.hallinger.org/&lt;br /&gt;
* Der mumble-testserver benutzt ein autoerneuerndes SSL-Zertifikat von Lets Encrypt.&lt;br /&gt;
&lt;br /&gt;
== Hauptziele des Projektes ==&lt;br /&gt;
* Bereitstellen von Kommunikation, die sowohl örtlich als auch kanaltechnisch getrennt ist&lt;br /&gt;
* Realistische Funkkommunikation&lt;br /&gt;
* Einfachheit in der Installation und Benutzung&lt;br /&gt;
* Unterstützung für beliebige Frequenzen&lt;br /&gt;
* ATIS Aufnahme und Wiedergabe&lt;br /&gt;
* Zivile Radiostationen sollen unterstützt werden&lt;br /&gt;
* Festnetz/Intercom Unterstützung&lt;br /&gt;
* RDF-Signale für Clients&lt;br /&gt;
* Einfach auf einem Server zu installieren und zu betreieben&lt;br /&gt;
* Unabhängigkeit von Simulatoren wie z.B. Flightgear&lt;br /&gt;
* Fähigkeit, in FlightGear integriert zu werden, mit der Option, weitere Clients und Applikationen zu unterstützen (ATC, aber auch andere Flugsimulatoren)&lt;br /&gt;
* Modularer Aufbau, damit einzelne Komponenten unterschiedlich implementiert werden können und einfache Erweiterbarkeit besteht&lt;br /&gt;
* Gute und vollständige Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Installation and Einrichtung ==&lt;br /&gt;
Die aktuelle Version kann hier heruntergeladen werden: [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] bietet auch eine Debug-Variante an).&lt;br /&gt;
&lt;br /&gt;
Die  [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#installation--einrichtung-des-mumble-plugins README] bietet detaillierte Angaben zur Installation.&lt;br /&gt;
&lt;br /&gt;
Jemand hat sogar ein Video (engl.) von der Installation gemacht! :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* Du brauchst ein installiertes und eingerichtetes Mumble &amp;gt;= 1.4, und dann lade darin das Plugin (unter mumble Einstellungen/plugins)&lt;br /&gt;
* Auf dem Mumbleserver (Version &amp;gt;= 1.4.0) trittst du einem Channel bei, dessen Name mit `fgcom-mumble` beginnt&lt;br /&gt;
* Im FlightGear-Launcher fügst du im Addon-Tab den `fgfs-addon` Ordner der FGCom-Mumble Veröffentlichung hinzu&lt;br /&gt;
* Starte FlightGear und benutze deine Funkgeräte (du funkst mit den ganz normalen FGCom-Tastenkombinationen; siehe unten)&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
FlightGear's FGCom-mumble Protokoll benutzt die normalen FGCom-Tastenkombinationen:&lt;br /&gt;
* Um auf COM1 zu funken, drückst du {{Key press|Space}}. Solange du überträgst, kannst du keine anderen Piloten durch das verwendete Funkgerät hören (diese sind Halbduplexgeräte).&lt;br /&gt;
* COM2 sendet mit {{Key press|Shift|Space}}.&lt;br /&gt;
* Seit FGCom-mumble 1.2.0:&lt;br /&gt;
** Mit COM3 funkst du über {{Key press|Alt|Space}} (früher musstest du ein eigenes Keybind definieren),&lt;br /&gt;
** Intercom sendet in full-duplex mit {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Jedes Funkgerät kann außerdem über die COMBar benutzt werden (öffnen über ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
Um FGCom-mumble ohne FlightGear zu probieren, kannst du auch die im Release mitgelieferte RadioGUI starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deine Installation testen ===&lt;br /&gt;
Als erstes solltest du sicherstellen, dass mumble an Sich gut funktioniert und du gut zu verstehen bist sowie andere gut verstehst.&lt;br /&gt;
Dazu deaktivierst du am Besten das Plugin oder du sprichst mit anderen auf einem Channel, der nicht mit `fgcom-mumble`beginnt.&lt;br /&gt;
&lt;br /&gt;
Das Plugin verändert Mumbles eingehende Audiopakete. Es fügt statisches Rauschen hinzu, das von der simulierten Funksignalstärke abhängt oder hebt den stream sogar auf, wenn der Funksender außerhalb der Reichweite liegt. Ausgehende Audiopakete werden nicht verändert.&lt;br /&gt;
&lt;br /&gt;
Falls der Server es unterstützt, kannst du auch einen traditionellen Echo-Test machen (dazu muss am Server ein `fgcom-recorder-bot` laufen). Funke auf der Frequenz `910.00` MHz und der Recorderbot wird mit der Aufzeichnung beginnen (er schreibt das in den mumble-chat) und nach Abschluss einen bot an deiner Position erzeugen, der das aufgenommene auf der Frequenz wiedergibt. So kannst du dich selbst hören, wie andere dich hören würden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebung ===&lt;br /&gt;
&lt;br /&gt;
Schau bitte in die [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#fehlerbehebung README] des Projekts. Diese hat detaillierte Informationen hierzu.&lt;br /&gt;
&lt;br /&gt;
Solange es nichts grundlegendes mit der Installation zu tun hat, hilft oft auch einfach ein Neustart von Mumble (das Plugin initialisiert sich selbständig frisch).&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität ===&lt;br /&gt;
FGCom-mumble unterstützt grundsätzlich das alte FGCom-UDP-Protokoll und sollte somit kompatibel mit allen clients sein, die dieses verwenden (z.B. ältere ATCpie oder OpenRadar Versionen). Allerdings gibt es auch ein paar Erweiterungen, die mit dem alten Protokoll nicht zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
* FlightGear wird durch ein [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon] unterstützt. Dieses erwartet die Standard-Funkgerätimplementierung (und funktioniert getestet zumindest mit der C172p und der C182S).&lt;br /&gt;
*[[ATC-pie]] hat eine integrierte Unterstützung (prüfe, ob &amp;quot;FGCom-mumble&amp;quot; anstelle von nur &amp;quot;FGCom&amp;quot; in den Einstellungen aktiviert ist).&lt;br /&gt;
*[[OpenRadar]] Unterstützt im Moment nur COM1 ([https://sourceforge.net/p/openradar/tickets/5/ Ticket dazu ist offen]). Für COM2 und weitere musst du entweder separate Mumble-Instanzen öffnen oder FGCom-mumble's RadioGUI zum Funken benutzen.&lt;br /&gt;
:Es gibt eine gepatchte Version von OpenRadar mit integriertem FGCom-mumble sowie 8.33 Channelmodus; verfügbar hier: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
==== Bekannte Inkompatibilitäten ====&lt;br /&gt;
* Das FlightGear UFO belegt {{Key press|Space}} selbst, sodass du nicht Funken kannst. Als workaround kannst du die COMBar benutzen, die mit dem FGFS Addon mitkommt.&lt;br /&gt;
&lt;br /&gt;
== RadioGUI ==&lt;br /&gt;
Die RadioGUI ist eine kleine Java8 Applikation, die einen FGCom-mumble client implementiert und Funkgeräte bereitstellt. Sie sendet die notwendigen UDP Nachrichten an das Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
In der GUI kannst du deinen Standort über eine Karte auswählen und dann deine Funkgeräte einstellen und testen.&lt;br /&gt;
Damit kannst du auch komplett mit allen Funktionen am simulierten Funknetz teilnehmen, ohne FlightGear zu starten.&lt;br /&gt;
&lt;br /&gt;
== Serverseite ==&lt;br /&gt;
Konzeptionell benötigst du als Minimum einfach einen Standard Mumbleserver (Version 1.4.0 oder höher), auf dem ein Channel eingerichtet wird, der mit `fgcom-mumble` beginnt. Das ist bereits genug, damit das Plugin Clientseitig den Rest erledigen kann. Der komplette Channel wird als einzelnes, weltumspannendes, kontinuierliches Radiowellenspektrum behandelt.&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen werden über Lua-Bots implementiert (die auch auf einer anderen Maschine laufen können):&lt;br /&gt;
* ATIS Aufzeichnung udn Wiedergabe&lt;br /&gt;
* Radioprogramm Wiedergabe (OGG Wiedergabe auf einer beliebigen Funkfrequenz), z.B. nutzbar für eigene NDBs mit Morsecode ([https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons])&lt;br /&gt;
* Statusseite Datensammlung&lt;br /&gt;
&lt;br /&gt;
Eine Statusseite fürs WWW ist als PHP-Seite implementiert, die die notwendigen Daten über den `fgcom-status-bot` bereitgestellt bekommt.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Installations- und Betriebsdokumentation ist in den Veröffentlichungen enthalten, aber auch [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server-de_DE.md online] im Projekt zugänglich.&lt;br /&gt;
&lt;br /&gt;
== Wie funktiooniert das alles? (technische Information) ==&lt;br /&gt;
Die technischen Details sind in den verschiedenen Readme-Dateien im Projekt dargelegt (zum Start empfielt sich [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst treten alle Teilnehmer einem einzigen Mumble-Channel bei und laden das fgcom-mumble Plugin. Das Plugin tauscht alle notwendigen Daten zwischen den Nutzern aus (Funkgeräte, Frequenzen, Standort, etc.) und basierend auf diesen Informationen werden die eingehenden Audioströme der anderen Nutzer entweder abgespielt oder stummgeschaltet. Für mehr Realismus werden abgespielte Audioströme mit Statischem Rauschen und weiteren Effekten unterlegt.&lt;br /&gt;
Aufgrund der Stummschaltefunktion abhängig von der Funkreichweite besteht eine unmittelbare Separierung nach Funkkanal und Standort, was allen Nutzern erlaubt, in ein und demselben Mumblekanal zu sein.&lt;br /&gt;
&lt;br /&gt;
== Weiterführender Inhalt ==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] mit weiteren Tipps/Hinweisen&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md FGCom-mumble README-de_DE.md] Haupt-Readme des Projektes mit allen Details, die du schon immer wissen wolltest&lt;br /&gt;
&lt;br /&gt;
=== Forum topic ===&lt;br /&gt;
* Der {{forum link|t=37644|title=FGCom-mumble}} Forumshtread hat Entwicklungsrelevante Informationen und dient zur allgemeinen Diskussion&lt;br /&gt;
* {{forum link|p=374950|title=Re: EDDF-Triangle}} und {{forum link|p=374970|title=Re: EDDF-Triangle}} - behandeln Details zu Kompatibilität und Unterschieden zwischen FGCom, FGCom-mumble und Mumble&lt;br /&gt;
&lt;br /&gt;
=== FlightGear Newsletter ===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: Erster Prototyp angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Lasttests erfolgreich, RDF implementiert, Live-Status Seite hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: Mehr tests, neue HF/VHF/UHF modelle, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API änderungen, verteilte Installation, Konfigurationsmöglichkeit per INI-Datei, Statistiken&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: Weitere API änderungen, realistische Simulation der 8.33kHz/25kHz Kanalüberlappung, RadiGUI hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringt Netzwerkfunktionen&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF Implementierung umgebaut, 0.12.0 angekündigt, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Bessere Unterstützung von Airliners, 0.13.0 and 0.14.0 angekündigt, Releasepaket neustrukturiert&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 angekündigt, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 angekündigt, updater bugfixes Teil II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 veröffentlicht, Mumble 1.4 wurde veröffentlicht'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[en:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141295</id>
		<title>De/FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/FGCom-mumble&amp;diff=141295"/>
		<updated>2025-02-03T12:07:57Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simuliert Funkkommunikation basierend auf der freien VoIP software [https://www.mumble.info/ Mumble]. Es integriert sich vollstädnig mit den Funkgeräten deines Flugzeuges in FlightGear und erlaubt dir, mit anderen Piloten und Fluglotsen auf realistische Weise zu kommunizieren. Dafür simuliert es ein lückenloses Radiowellenspektrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble ist eine Alternative zum altbekannten [[FGCom]] sowie [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend]. &lt;br /&gt;
&lt;br /&gt;
FGCom-mumble nutzt den Pluginmechanismus, der in Mumble 1.4.0 verfügbar wurde und benötigt lediglich ein vorkompiliertes Plugin, das von einem ganz normalen Mumble-Programm geladen wird. Das aktuellste Release kannst du hier herunterladen: https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Server ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
* Der FGCom-mumble test server ist &amp;lt;code&amp;gt;mumble://fgcom.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
* Die Statusseite für diese Instanz, die alle verbundenen Clients anzeigt, ist hier: https://fgcom.hallinger.org/&lt;br /&gt;
* Der mumble-testserver benutzt ein autoerneuerndes SSL-Zertifikat von Lets Encrypt.&lt;br /&gt;
&lt;br /&gt;
== Hauptziele des Projektes ==&lt;br /&gt;
* Bereitstellen von Kommunikation, die sowohl örtlich als auch kanaltechnisch getrennt ist&lt;br /&gt;
* Realistische Funkkommunikation&lt;br /&gt;
* Einfachheit in der Installation und Benutzung&lt;br /&gt;
* Unterstützung für beliebige Frequenzen&lt;br /&gt;
* ATIS Aufnahme und Wiedergabe&lt;br /&gt;
* Zivile Radiostationen sollen unterstützt werden&lt;br /&gt;
* Festnetz/Intercom Unterstützung&lt;br /&gt;
* RDF-Signale für Clients&lt;br /&gt;
* Einfach auf einem Server zu installieren und zu betreieben&lt;br /&gt;
* Unabhängigkeit von Simulatoren wie z.B. Flightgear&lt;br /&gt;
* Fähigkeit, in FlightGear integriert zu werden, mit der Option, weitere Clients und Applikationen zu unterstützen (ATC, aber auch andere Flugsimulatoren)&lt;br /&gt;
* Modularer Aufbau, damit einzelne Komponenten unterschiedlich implementiert werden können und einfache Erweiterbarkeit besteht&lt;br /&gt;
* Gute und vollständige Dokumentation&lt;br /&gt;
&lt;br /&gt;
== Installation and Einrichtung ==&lt;br /&gt;
Die aktuelle Version kann hier heruntergeladen werden: [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] bietet auch eine Debug-Variante an).&lt;br /&gt;
&lt;br /&gt;
Die  [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#installation--einrichtung-des-mumble-plugins README] bietet detaillierte Angaben zur Installation.&lt;br /&gt;
&lt;br /&gt;
Jemand hat sogar ein Video (engl.) von der Installation gemacht! :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* Du brauchst ein installiertes und eingerichtetes Mumble &amp;gt;= 1.4, und dann lade darin das Plugin (unter mumble Einstellungen/plugins)&lt;br /&gt;
* Auf dem Mumbleserver (Version &amp;gt;= 1.4.0) trittst du einem Channel bei, dessen Name mit `fgcom-mumble` beginnt&lt;br /&gt;
* Im FlightGear-Launcher fügst du im Addon-Tab den `fgfs-addon` Ordner der FGCom-Mumble Veröffentlichung hinzu&lt;br /&gt;
* Starte FlightGear und benutze deine Funkgeräte (du funkst mit den ganz normalen FGCom-Tastenkombinationen; siehe unten)&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
FlightGear's FGCom-mumble Protokoll benutzt die normalen FGCom-Tastenkombinationen:&lt;br /&gt;
* Um auf COM1 zu funken, drückst du {{Key press|Space}}. Solange du überträgst, kannst du keine anderen Piloten durch das verwendete Funkgerät hören (diese sind Halbduplexgeräte).&lt;br /&gt;
* COM2 sendet mit {{Key press|Shift|Space}}.&lt;br /&gt;
* Seit FGCom-mumble 1.2.0:&lt;br /&gt;
** Mit COM3 funkst du über {{Key press|Alt|Space}} (früher musstest du ein eigenes Keybind definieren),&lt;br /&gt;
** Intercom sendet in full-duplex mit {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Jedes Funkgerät kann außerdem über die COMBar benutzt werden (öffnen über ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
Um FGCom-mumble ohne FlightGear zu probieren, kannst du auch die im Release mitgelieferte RadioGUI starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deine Installation testen ===&lt;br /&gt;
Als erstes solltest du sicherstellen, dass mumble an Sich gut funktioniert und du gut zu verstehen bist sowie andere gut verstehst.&lt;br /&gt;
Dazu deaktivierst du am Besten das Plugin oder du sprichst mit anderen auf einem Channel, der nicht mit `fgcom-mumble`beginnt.&lt;br /&gt;
&lt;br /&gt;
Das Plugin verändert Mumbles eingehende Audiopakete. Es fügt statisches Rauschen hinzu, das von der simulierten Funksignalstärke abhängt oder hebt den stream sogar auf, wenn der Funksender außerhalb der Reichweite liegt. Ausgehende Audiopakete werden nicht verändert.&lt;br /&gt;
&lt;br /&gt;
Falls der Server es unterstützt, kannst du auch einen traditionellen Echo-Test machen (dazu muss am Server ein `fgcom-recorder-bot` laufen). Funke auf der Frequenz `910.00` MHz und der Recorderbot wird mit der Aufzeichnung beginnen (er schreibt das in den mumble-chat) und nach Abschluss einen bot an deiner Position erzeugen, der das aufgenommene auf der Frequenz wiedergibt. So kannst du dich selbst hören, wie andere dich hören würden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fehlerbehebung ===&lt;br /&gt;
&lt;br /&gt;
Schau bitte in die [https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md#fehlerbehebung README] des Projekts. Diese hat detaillierte Informationen hierzu.&lt;br /&gt;
&lt;br /&gt;
Solange es nichts grundlegendes mit der Installation zu tun hat, hilft oft auch einfach ein Neustart von Mumble (das Plugin initialisiert sich selbständig frisch).&lt;br /&gt;
&lt;br /&gt;
=== Kompatibilität ===&lt;br /&gt;
FGCom-mumble unterstützt grundsätzlich das alte FGCom-UDP-Protokoll und sollte somit kompatibel mit allen clients sein, die dieses verwenden (z.B. ältere ATCpie oder OpenRadar Versionen). Allerdings gibt es auch ein paar Erweiterungen, die mit dem alten Protokoll nicht zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
* FlightGear wird durch ein [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon] unterstützt. Dieses erwartet die Standard-Funkgerätimplementierung (und funktioniert getestet zumindest mit der C172p und der C182S).&lt;br /&gt;
*[[ATC-pie]] hat eine integrierte Unterstützung (prüfe, ob &amp;quot;FGCom-mumble&amp;quot; anstelle von nur &amp;quot;FGCom&amp;quot; in den Einstellungen aktiviert ist).&lt;br /&gt;
*[[OpenRadar]] Unterstützt im Moment nur COM1 ([https://sourceforge.net/p/openradar/tickets/5/ Ticket dazu ist offen]). Für COM2 und weitere musst du entweder separate Mumble-Instanzen öffnen oder FGCom-mumble's RadioGUI zum Funken benutzen.&lt;br /&gt;
:Es gibt eine gepatchte Version von OpenRadar mit integriertem FGCom-mumble sowie 8.33 Channelmodus; verfügbar hier: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
==== Bekannte Inkompatibilitäten ====&lt;br /&gt;
* Das FlightGear UFO belegt {{Key press|Space}} selbst, sodass du nicht Funken kannst. Als workaround kannst du die COMBar benutzen, die mit dem FGFS Addon mitkommt.&lt;br /&gt;
&lt;br /&gt;
== RadioGUI ==&lt;br /&gt;
Die RadioGUI ist eine kleine Java8 Applikation, die einen FGCom-mumble client implementiert und Funkgeräte bereitstellt. Sie sendet die notwendigen UDP Nachrichten an das Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
In der GUI kannst du deinen Standort über eine Karte auswählen und dann deine Funkgeräte einstellen und testen.&lt;br /&gt;
Damit kannst du auch komplett mit allen Funktionen am simulierten Funknetz teilnehmen, ohne FlightGear zu starten.&lt;br /&gt;
&lt;br /&gt;
== Serverseite ==&lt;br /&gt;
Konzeptionell benötigst du als Minimum einfach einen Standard Mumbleserver (Version 1.4.0 oder höher), auf dem ein Channel eingerichtet wird, der mit `fgcom-mumble` beginnt. Das ist bereits genug, damit das Plugin Clientseitig den Rest erledigen kann. Der komplette Channel wird als einzelnes, weltumspannendes, kontinuierliches Radiowellenspektrum behandelt.&lt;br /&gt;
&lt;br /&gt;
Weitere Funktionen werden über Lua-Bots implementiert (die auch auf einer anderen Maschine laufen können):&lt;br /&gt;
* ATIS Aufzeichnung udn Wiedergabe&lt;br /&gt;
* Radioprogramm Wiedergabe (OGG Wiedergabe auf einer beliebigen Funkfrequenz), z.B. nutzbar für eigene NDBs mit Morsecode ([https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons])&lt;br /&gt;
* Statusseite Datensammlung&lt;br /&gt;
&lt;br /&gt;
Eine Statusseite fürs WWW ist als PHP-Seite implementiert, die die notwendigen Daten über den `fgcom-status-bot` bereitgestellt bekommt.&lt;br /&gt;
&lt;br /&gt;
Detaillierte Installations- und Betriebsdokumentation ist in den Veröffentlichungen enthalten, aber auch [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server-de_DE.md online] im Projekt zugänglich.&lt;br /&gt;
&lt;br /&gt;
== Wie funktiooniert das alles? (technische Information) ==&lt;br /&gt;
Die technischen Details sind in den verschiedenen Readme-Dateien im Projekt dargelegt (zum Start empfielt sich [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst treten alle Teilnehmer einem einzigen Mumble-Channel bei und laden das fgcom-mumble Plugin. Das Plugin tauscht alle notwendigen Daten zwischen den Nutzern aus (Funkgeräte, Frequenzen, Standort, etc.) und basierend auf diesen Informationen werden die eingehenden Audioströme der anderen Nutzer entweder abgespielt oder stummgeschaltet. Für mehr Realismus werden abgespielte Audioströme mit Statischem Rauschen und weiteren Effekten unterlegt.&lt;br /&gt;
Aufgrund der Stummschaltefunktion abhängig von der Funkreichweite besteht eine unmittelbare Separierung nach Funkkanal und Standort, was allen Nutzern erlaubt, in ein und demselben Mumblekanal zu sein.&lt;br /&gt;
&lt;br /&gt;
== Weiterführender Inhalt ==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] mit weiteren Tipps/Hinweisen&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README-de_DE.md FGCom-mumble README-de_DE.md] Haupt-Readme des Projektes mit allen Details, die du schon immer wissen wolltest&lt;br /&gt;
&lt;br /&gt;
=== Forum topic ===&lt;br /&gt;
* Der {{forum link|t=37644|title=FGCom-mumble}} Forumshtread hat Entwicklungsrelevante Informationen und dient zur allgemeinen Diskussion&lt;br /&gt;
* {{forum link|p=374950|title=Re: EDDF-Triangle}} und {{forum link|p=374970|title=Re: EDDF-Triangle}} - behandeln Details zu Kompatibilität und Unterschieden zwischen FGCom, FGCom-mumble und Mumble&lt;br /&gt;
&lt;br /&gt;
=== FlightGear Newsletter ===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: Erster Prototyp angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Lasttests erfolgreich, RDF implementiert, Live-Status Seite hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: Mehr tests, neue HF/VHF/UHF modelle, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API änderungen, verteilte Installation, Konfigurationsmöglichkeit per INI-Datei, Statistiken&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: Weitere API änderungen, realistische Simulation der 8.33kHz/25kHz Kanalüberlappung, RadiGUI hinzugefügt&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server angekündigt&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringt Netzwerkfunktionen&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF Implementierung umgebaut, 0.12.0 angekündigt, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Bessere Unterstützung von Airliners, 0.13.0 and 0.14.0 angekündigt, Releasepaket neustrukturiert&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 angekündigt, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 angekündigt, updater bugfixes Teil II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 veröffentlicht, Mumble 1.4 wurde veröffentlicht'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[en:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141294</id>
		<title>FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141294"/>
		<updated>2025-02-03T12:06:46Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simulates radio communication based on the VoIP software [https://www.mumble.info/ Mumble]. It integrates fully with the radio stack of your FlightGear plane, allowing you to communicate with other pilots and airspace controllers during your flight. It simulates a global, continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble is an alternative to the already known [[FGCom]] client and [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend].&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble leverages the plugin mechanism introduced by Mumble 1.4.0 and just needs a precompiled plugin loaded by a stock Mumble client.&lt;br /&gt;
You can download the latest release from https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Servers ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
*The main FGCom-mumble test server is &amp;lt;code&amp;gt;mumble://fgcom-dev.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
*The status page for that service showing all connected clients is at: https://fgcom-dev.hallinger.org/&lt;br /&gt;
*The mumble test server uses a autorenewed certificate from letsencrypt.&lt;br /&gt;
&lt;br /&gt;
==Project main goals==&lt;br /&gt;
*Provide communication with geographic and channel separation&lt;br /&gt;
*Provide a realistic radio simulation&lt;br /&gt;
*Ease of use for the end user/pilot&lt;br /&gt;
*Arbitrary frequency support&lt;br /&gt;
*ATIS recording and playback&lt;br /&gt;
*Radio station broadcast support&lt;br /&gt;
*Landline/Intercom support&lt;br /&gt;
*RDF detection for clients&lt;br /&gt;
*Ease of server side installation and operation&lt;br /&gt;
*Standalone nature (no dependency on FlightGear)&lt;br /&gt;
* Capability to be integrated into FlightGear, with the option to support third party applications (ATC, but also other flight simulators)&lt;br /&gt;
*Modularity, so individual component implementations can be switched and its easy to add features&lt;br /&gt;
*Good and complete documentation&lt;br /&gt;
&lt;br /&gt;
== Installation and setup==&lt;br /&gt;
The latest release can be fetched from [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] also has debug versions).&lt;br /&gt;
&lt;br /&gt;
The provided [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#install--setup-for-the-client README] has detailed instructions on the needed prerequisites and installation procedures.&lt;br /&gt;
&lt;br /&gt;
Someone even made an install video :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
(thanks mate, well done! however HF is actually simulated already :)&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
* Have a stock Mumble client &amp;gt;= 1.4 running, and load the plugin (mumble settings/plugins page)&lt;br /&gt;
* Join a channel named `fgcom-mumble` (on a &amp;gt;= 1.4 mumble server)&lt;br /&gt;
* Add the `fgfs-addon` folder of the client release as FlightGear Addon in your launcher&lt;br /&gt;
* Start FlightGear and use your plane's radio stack (it uses default FGCom buttons, see below)&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
FlightGear's FGCom-mumble protocol uses the default FGCom buttons:&lt;br /&gt;
* When you want to talk on COM1 you have to press {{Key press|Space}}. While transmitting you can not hear other pilots trough the used radio (they are half-duplex).&lt;br /&gt;
* You can also talk on COM2 by pressing {{Key press|Shift|Space}}.&lt;br /&gt;
* since FGCom-mumble 1.2.0:&lt;br /&gt;
** For COM3 you use {{Key press|Alt|Space}} (previously you need to define a custom keybind),&lt;br /&gt;
** Intercom is available in full-duplex with {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Any radio can also accessed by the COMBar (open from ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
If you want to try it out without FlightGear, you can also start the supplied RadioGUI.&lt;br /&gt;
&lt;br /&gt;
=== How to test your setup?===&lt;br /&gt;
First, make sure Mumble is working reliably by talking to other people. Either disable the plugin, or be sure you are outside any radio channel (starting with `fgcom-mumble`).&lt;br /&gt;
&lt;br /&gt;
The plugin alters Mumble's receiving audio stream. It adds static noise depending on the radio signal quality, or cancels out all audio when not in range. The outgoing audio stream is not altered in any way.&lt;br /&gt;
&lt;br /&gt;
If the server supports it (in essence there is a bot-manager running and a `fgcom-recorder-bot` listening) you may do a traditional echo test by tuning `910.00` and start to talk. The recorder-bot will record that (he writes that into mumbles chat) and spawn an echo bot at your position, replaying your message (so you will hear yourself like others will hear you).&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
For troubleshooting, refer to the projects [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#troubleshooting README] as it has further suggestions.&lt;br /&gt;
&lt;br /&gt;
If it's nothing setup related, an easy fix is to just restart mumble (the plugin will reinitialize itself).&lt;br /&gt;
&lt;br /&gt;
===Compatibility ===&lt;br /&gt;
FGCom-mumble supports the legacy FGCom UDP protocol and thus should be compatible to clients supporting that. However, it also features some new UDP fields.&lt;br /&gt;
&lt;br /&gt;
*FlightGear is supported through an [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon]. This assumes the default radio implementation and works with at least the C172P and the C182S.&lt;br /&gt;
*[[ATC-pie]] has built in support already (be sure to activate &amp;quot;FGCom-mumble&amp;quot; instead of just &amp;quot;FGCom&amp;quot; in the settings).&lt;br /&gt;
*[[OpenRadar]] currently supports just COM1 ([https://sourceforge.net/p/openradar/tickets/5/ ticket pending]). To use COM2 and more, you need to either start several mumble instances, or use FGCom-mumble's RadioGUI.&lt;br /&gt;
:There is a patched version of OpenRadar with FGCom-mumble and  8.33 channel tuning support available here: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
====Known incompatibilities====&lt;br /&gt;
* The UFO aircraft rebinds {{Key press|Space}} so you can't transmit on the radio. As a workaround you can use the COMBar that comes integrated with the FGFS addon.&lt;br /&gt;
&lt;br /&gt;
==RadioGUI==&lt;br /&gt;
The FGCom-mumble RadioGUI is a small Java 8 application that can send the FGCom-mumble UDP messages to the Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
Inside the GUI, you can pick your location from a map and then setup and use your radio stack.&lt;br /&gt;
That said, the RadiGUI can be used instead (or additionally to) FGFS to participate on the simulated radio net.&lt;br /&gt;
&lt;br /&gt;
==Server side==&lt;br /&gt;
By design, all that is needed is a standard Murmur server (version 1.4.0 or later) and a specially named channel (it has to start with `fgcom-mumble`). This is enough to let the plugin do its work. The entire channel is treated as a single, worldwide continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
Additional features are implemented using server side Lua bots (which may run somewhere else):&lt;br /&gt;
* ATIS recording and broadcasting&lt;br /&gt;
* Radio program broadcasting (OGG playback on a frequency), [https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons] &lt;br /&gt;
* Status page data collection&lt;br /&gt;
&lt;br /&gt;
A status page showing client details is available as a PHP website, that gets its data fed from the fgcom-status-bot.&lt;br /&gt;
&lt;br /&gt;
Detailed installation and operation documentation is shipped with the releases, but is also [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server.md online].&lt;br /&gt;
&lt;br /&gt;
==How does it work? (technical information)==&lt;br /&gt;
The technical details are specified and described in the various readme files of the projects source code (as a starter read the [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Basicly, all users join the same mumble channel and run the fgcom-mumble plugin. The plugin knows everything necessary from the participating users (like radios used, frequencies tuned, locations, etc) and based on that information mutes or plays incoming voice messages from the other users. Based on signal quality, static noise is mixed in for more fun and a more realistic experience.&lt;br /&gt;
Because the voice of other users is muted, it is a design wise out-of-the-box feature that brings frequency and location separation but allows everyone to stay in the same mumble channel.&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] with hints etc&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README.md FGCom-mumble README.md] Main readme of the project bringing all the details you always wanted to know&lt;br /&gt;
&lt;br /&gt;
===Forum topic===&lt;br /&gt;
*The {{forum link|t=37644|title=FGCom-mumble}} has development discussions and release announcements&lt;br /&gt;
*{{forum link|p=374950|title=Re: EDDF-Triangle}} and  {{forum link|p=374970|title=Re: EDDF-Triangle}} - Compatibility and differences between FGCom, FGCom-mumble and Mumble&lt;br /&gt;
&lt;br /&gt;
===FlightGear Newsletter===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: First prototype announced&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Load tests successful, RDF implemented, Live-Status page added&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: More testing, new HF/VHF/UHF models, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API changes, distributed deployment, configuration trough INI, statistics&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: More API changes, proper 8.33kHz/25kHz overlap, RadiGUI added&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server announced&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringing networking capability&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF reworked, 0.12.0 announced, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Better airliner support, announced 0.13.0 and 0.14.0, restructured release package structure&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 announced, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 announced, updater bugfixes part II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 released, Mumble 1.4 hit the light'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea to integrate into FGFS ==&lt;br /&gt;
{{progressbar|10|10}} {{pending}}&lt;br /&gt;
&lt;br /&gt;
ML Discussion: https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1919A28D-44D8-46F0-8A65-A5633A8AB743%40hallinger.org/#msg58717212&lt;br /&gt;
&lt;br /&gt;
Using [https://github.com/mumble-voip/libmumble libmumble], a standalone mumble c++17 library, we could integrate FGCom-mumble directly into FlightGear. This way, FGFS would talk &amp;quot;mumble&amp;quot; to a mumble server and the plugins functions would be integrated into the core. For pilots, a simple &amp;quot;click&amp;quot; to connect in the multiplayer would be enough to participate, while having all the advanced features of fgcom-mumble available (like custom NDBs, radio stations; as well as the possibility for other clients (ATC!) to participate easily on the radio spectrum).&lt;br /&gt;
&lt;br /&gt;
A main idea is also to use the existing fgcom-mumble code to avoid double work. But otoh maybe a direct rewrite of the core stuff may be cleaner; most of the magic is in the fgcom-mumble radio model code anyway, so we might just use some bits, if that is possible?&lt;br /&gt;
&lt;br /&gt;
libmubmble is not yet API-stable (but should be working), but there was already a [https://github.com/mumble-voip/libmumble/issues/18 first dicussion] about feasability and basic mechanics:&lt;br /&gt;
* From FGCom-mumbles side, we need to integrate the data structures into the core. So radios need to be registered, etc. This should not be too hard&lt;br /&gt;
** we probably just need to not run the UPD-Server but send the needed data directly into the decoding function of it. At a later stage, we might better integrate that part, but for a first working solution, just creatig a FCGOM-mumble UDP-Packet string in FGFS and sending it periodically (or already on-demand?) into the udp-servers decoder function should be enough - it just creates some CPU overhead which should not be too bad and will establish the needed local data structure.&lt;br /&gt;
** Note, that we cannot rely on the mpservers data structures (even if there is radio data), because in FGCom-mumble potential other clients are also participating (like radio-playback bots for ATIS etc!). So we really need to use mumbles plugin messages.&lt;br /&gt;
* Basicly the libmumble will run its own threads for networking. Upon receiving mumble audio or mumble-plugin data, callback functions would be called from the lib (https://github.com/mumble-voip/libmumble/issues/18#issuecomment-1868498537):&lt;br /&gt;
** Incoming audio data need to be processed by the fgcom-mumble plugin functions, and then the result handed over into fgfs audio out handling.&lt;br /&gt;
** Incoming plugin data needs to be fed into the fgcom-mumble internal remote data struct (just hand the data into the existing data parser).&lt;br /&gt;
* Pressing the already existing fgfs PTT button&lt;br /&gt;
** would need to send plugin data to mumble, to inform other clients. This is currently done by calling a mumble client function. It would probably be enough, if fgfs core supplied an implemention that calls the appropriate libmumble function and hands over the data.&lt;br /&gt;
** also, the audio data needs to be fetched from the mic, and then handed over to libmumbles audio encoding and sending routine. This probably can somewhat be partly copied from the legacy fgcom implementation.&lt;br /&gt;
* Questions regarding fgfs currently are:&lt;br /&gt;
** {{tick}} (''Answer:'' use [[Howto:Create_new_subsystems|Subsystem]]) how to exactly the integration on fgfs side works. That needs peeks on fgcoms code as well as some discussion at the mailing list.&lt;br /&gt;
** how to integrate the libmubmle code into the fgfs build chain (its cmake).&lt;br /&gt;
*** {{tick}} legally: libmubmle has a [https://github.com/mumble-voip/libmumble/blob/master/LICENSE BSD 3-clause] licence, is that compatible?&lt;br /&gt;
*** {{tick}} And what about libmubmles dependencies, like OpenSSL?&lt;br /&gt;
*** technically, how to include that all into the existing build system?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[de:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141201</id>
		<title>FGCom-mumble</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FGCom-mumble&amp;diff=141201"/>
		<updated>2025-01-08T10:29:55Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Idea to integrate into FGFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FGCom-mumble''' simulates radio communication based on the VoIP software [https://www.mumble.info/ Mumble]. It integrates fully with the radio stack of your FlightGear plane, allowing you to communicate with other pilots and airspace controllers during your flight. It simulates a global, continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble is an alternative to the already known [[FGCom]] client and [https://forum.flightgear.org/viewtopic.php?t=30691 FGExtend].&lt;br /&gt;
&lt;br /&gt;
FGCom-mumble leverages the plugin mechanism introduced by Mumble 1.4.0 and just needs a precompiled plugin loaded by a stock Mumble client.&lt;br /&gt;
You can download the latest release from https://github.com/hbeni/fgcom-mumble/releases.&lt;br /&gt;
&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = FGCom-mumble_logo.png|128px&lt;br /&gt;
|developedby         = Benedikt Hallinger&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Radio/Communication&lt;br /&gt;
|latestrelease       = [https://github.com/hbeni/fgcom-mumble/releases see release page]&lt;br /&gt;
|initialrelease      = 1.0.0 (17.01.2022)&lt;br /&gt;
|writtenin           = C++/Lua/Java/PHP&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v3&lt;br /&gt;
|website             = https://github.com/hbeni/fgcom-mumble&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Servers ==&lt;br /&gt;
&amp;lt;!-- Maybe we can switch to mumble://radio-mumble.flightgear.fr/fgcom-mumble some time... --&amp;gt;&lt;br /&gt;
*The main FGCom-mumble test server is &amp;lt;code&amp;gt;mumble://fgcom.hallinger.org/fgcom-mumble&amp;lt;/code&amp;gt;&lt;br /&gt;
*The status page for that service showing all connected clients is at: https://fgcom.hallinger.org/&lt;br /&gt;
*On first connection Mumble client will ask whether to trust the certificate presented by the server. Currently the server certificate has following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Common Name: Murmur Autogenerated Certificate v2&lt;br /&gt;
Valid from: Mon. Dec. 7 21:12:40 2020 GMT&lt;br /&gt;
Valid to: Sun. Dec. 2 21:12:40 2040 GMT&lt;br /&gt;
Serial: 3031&lt;br /&gt;
Public Key: 2048 bits RSA&lt;br /&gt;
Digest (SHA-1): E6:9A:FA:62:2C:48:4D:73:95:D7:EE:0E:14:0D:5A:C2:AE:14:1C:31&lt;br /&gt;
Digest (SHA-256): 50:CE:17:63:FB:FC:40:03:B4:BF:8F:1F:84:35:4C:BA:5D:5C:BE:E4:AD:F9:8C:D8:45:1F:C7:28:EB:CA:3A:C0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is always a good idea to verify if the signature matches.&lt;br /&gt;
&lt;br /&gt;
==Project main goals==&lt;br /&gt;
*Provide communication with geographic and channel separation&lt;br /&gt;
*Provide a realistic radio simulation&lt;br /&gt;
*Ease of use for the end user/pilot&lt;br /&gt;
*Arbitrary frequency support&lt;br /&gt;
*ATIS recording and playback&lt;br /&gt;
*Radio station broadcast support&lt;br /&gt;
*Landline/Intercom support&lt;br /&gt;
*RDF detection for clients&lt;br /&gt;
*Ease of server side installation and operation&lt;br /&gt;
*Standalone nature (no dependency on FlightGear)&lt;br /&gt;
* Capability to be integrated into FlightGear, with the option to support third party applications (ATC, but also other flight simulators)&lt;br /&gt;
*Modularity, so individual component implementations can be switched and its easy to add features&lt;br /&gt;
*Good and complete documentation&lt;br /&gt;
&lt;br /&gt;
== Installation and setup==&lt;br /&gt;
The latest release can be fetched from [https://github.com/hbeni/fgcom-mumble/releases GitHub] ([https://github.com/hbeni/fgcom-mumble/actions nightly build] also has debug versions).&lt;br /&gt;
&lt;br /&gt;
The provided [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#install--setup-for-the-client README] has detailed instructions on the needed prerequisites and installation procedures.&lt;br /&gt;
&lt;br /&gt;
Someone even made an install video :) https://www.youtube.com/watch?v=jTRzfVfkgZE and https://www.youtube.com/watch?v=boHsPVTSddk&lt;br /&gt;
(thanks mate, well done! however HF is actually simulated already :)&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
* Have a stock Mumble client &amp;gt;= 1.4 running, and load the plugin (mumble settings/plugins page)&lt;br /&gt;
* Join a channel named `fgcom-mumble` (on a &amp;gt;= 1.4 mumble server)&lt;br /&gt;
* Add the `fgfs-addon` folder of the client release as FlightGear Addon in your launcher&lt;br /&gt;
* Start FlightGear and use your plane's radio stack (it uses default FGCom buttons, see below)&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
FlightGear's FGCom-mumble protocol uses the default FGCom buttons:&lt;br /&gt;
* When you want to talk on COM1 you have to press {{Key press|Space}}. While transmitting you can not hear other pilots trough the used radio (they are half-duplex).&lt;br /&gt;
* You can also talk on COM2 by pressing {{Key press|Shift|Space}}.&lt;br /&gt;
* since FGCom-mumble 1.2.0:&lt;br /&gt;
** For COM3 you use {{Key press|Alt|Space}} (previously you need to define a custom keybind),&lt;br /&gt;
** Intercom is available in full-duplex with {{Key press|Ctrl|Space}}&lt;br /&gt;
&lt;br /&gt;
Any radio can also accessed by the COMBar (open from ''Menu/Multiplayer/FGCom-mumble'').&lt;br /&gt;
&lt;br /&gt;
If you want to try it out without FlightGear, you can also start the supplied RadioGUI.&lt;br /&gt;
&lt;br /&gt;
=== How to test your setup?===&lt;br /&gt;
First, make sure Mumble is working reliably by talking to other people. Either disable the plugin, or be sure you are outside any radio channel (starting with `fgcom-mumble`).&lt;br /&gt;
&lt;br /&gt;
The plugin alters Mumble's receiving audio stream. It adds static noise depending on the radio signal quality, or cancels out all audio when not in range. The outgoing audio stream is not altered in any way.&lt;br /&gt;
&lt;br /&gt;
If the server supports it (in essence there is a bot-manager running and a `fgcom-recorder-bot` listening) you may do a traditional echo test by tuning `910.00` and start to talk. The recorder-bot will record that (he writes that into mumbles chat) and spawn an echo bot at your position, replaying your message (so you will hear yourself like others will hear you).&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
For troubleshooting, refer to the projects [https://github.com/hbeni/fgcom-mumble/blob/master/README.md#troubleshooting README] as it has further suggestions.&lt;br /&gt;
&lt;br /&gt;
If it's nothing setup related, an easy fix is to just restart mumble (the plugin will reinitialize itself).&lt;br /&gt;
&lt;br /&gt;
===Compatibility ===&lt;br /&gt;
FGCom-mumble supports the legacy FGCom UDP protocol and thus should be compatible to clients supporting that. However, it also features some new UDP fields.&lt;br /&gt;
&lt;br /&gt;
*FlightGear is supported through an [https://github.com/hbeni/fgcom-mumble/tree/master/client/fgfs-addon FlightGear addon]. This assumes the default radio implementation and works with at least the C172P and the C182S.&lt;br /&gt;
*[[ATC-pie]] has built in support already (be sure to activate &amp;quot;FGCom-mumble&amp;quot; instead of just &amp;quot;FGCom&amp;quot; in the settings).&lt;br /&gt;
*[[OpenRadar]] currently supports just COM1 ([https://sourceforge.net/p/openradar/tickets/5/ ticket pending]). To use COM2 and more, you need to either start several mumble instances, or use FGCom-mumble's RadioGUI.&lt;br /&gt;
:There is a patched version of OpenRadar with FGCom-mumble and  8.33 channel tuning support available here: http://fgcom.hallinger.org/OpenRadar_fgcom-mumble.jar&lt;br /&gt;
&lt;br /&gt;
====Known incompatibilities====&lt;br /&gt;
* The UFO aircraft rebinds {{Key press|Space}} so you can't transmit on the radio. As a workaround you can use the COMBar that comes integrated with the FGFS addon.&lt;br /&gt;
&lt;br /&gt;
==RadioGUI==&lt;br /&gt;
The FGCom-mumble RadioGUI is a small Java 8 application that can send the FGCom-mumble UDP messages to the Mumble plugin.&lt;br /&gt;
&lt;br /&gt;
Inside the GUI, you can pick your location from a map and then setup and use your radio stack.&lt;br /&gt;
That said, the RadiGUI can be used instead (or additionally to) FGFS to participate on the simulated radio net.&lt;br /&gt;
&lt;br /&gt;
==Server side==&lt;br /&gt;
By design, all that is needed is a standard Murmur server (version 1.4.0 or later) and a specially named channel (it has to start with `fgcom-mumble`). This is enough to let the plugin do its work. The entire channel is treated as a single, worldwide continuous radio frequency spectrum.&lt;br /&gt;
&lt;br /&gt;
Additional features are implemented using server side Lua bots (which may run somewhere else):&lt;br /&gt;
* ATIS recording and broadcasting&lt;br /&gt;
* Radio program broadcasting (OGG playback on a frequency), [https://github.com/hbeni/fgcom-mumble/wiki/How-to-create-a-custom-NDB Custom NDB beacons] &lt;br /&gt;
* Status page data collection&lt;br /&gt;
&lt;br /&gt;
A status page showing client details is available as a PHP website, that gets its data fed from the fgcom-status-bot.&lt;br /&gt;
&lt;br /&gt;
Detailed installation and operation documentation is shipped with the releases, but is also [https://github.com/hbeni/fgcom-mumble/blob/master/server/Readme.server.md online].&lt;br /&gt;
&lt;br /&gt;
==How does it work? (technical information)==&lt;br /&gt;
The technical details are specified and described in the various readme files of the projects source code (as a starter read the [https://github.com/hbeni/fgcom-mumble/blob/master/Readme.architecture.md Readme.architecture.md]).&lt;br /&gt;
&lt;br /&gt;
Basicly, all users join the same mumble channel and run the fgcom-mumble plugin. The plugin knows everything necessary from the participating users (like radios used, frequencies tuned, locations, etc) and based on that information mutes or plays incoming voice messages from the other users. Based on signal quality, static noise is mixed in for more fun and a more realistic experience.&lt;br /&gt;
Because the voice of other users is muted, it is a design wise out-of-the-box feature that brings frequency and location separation but allows everyone to stay in the same mumble channel.&lt;br /&gt;
&lt;br /&gt;
==Related content==&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/wiki FGCom-mumble GitHub wiki] with hints etc&lt;br /&gt;
*[https://github.com/hbeni/fgcom-mumble/blob/master/README.md FGCom-mumble README.md] Main readme of the project bringing all the details you always wanted to know&lt;br /&gt;
&lt;br /&gt;
===Forum topic===&lt;br /&gt;
*The {{forum link|t=37644|title=FGCom-mumble}} has development discussions and release announcements&lt;br /&gt;
*{{forum link|p=374950|title=Re: EDDF-Triangle}} and  {{forum link|p=374970|title=Re: EDDF-Triangle}} - Compatibility and differences between FGCom, FGCom-mumble and Mumble&lt;br /&gt;
&lt;br /&gt;
===FlightGear Newsletter===&lt;br /&gt;
*[[FlightGear_Newsletter_June_2020]]: First prototype announced&lt;br /&gt;
*[[FlightGear_Newsletter_July_2020]]: Load tests successful, RDF implemented, Live-Status page added&lt;br /&gt;
*[[FlightGear_Newsletter_August_2020]]: More testing, new HF/VHF/UHF models, auto-updater&lt;br /&gt;
*[[FlightGear_Newsletter_September_2020]]: Mumble API changes, distributed deployment, configuration trough INI, statistics&lt;br /&gt;
*[[FlightGear_Newsletter_October_2020]]: More API changes, proper 8.33kHz/25kHz overlap, RadiGUI added&lt;br /&gt;
*[[FlightGear_Newsletter_November_2020]]: Test server announced&lt;br /&gt;
*[[FlightGear_Newsletter_December_2020]]: Release 0.8.0 bringing networking capability&lt;br /&gt;
*[[FlightGear_Newsletter_April_2021]]: RDF reworked, 0.12.0 announced, MacOS support&lt;br /&gt;
*[[FlightGear_Newsletter_May_2021]]: Better airliner support, announced 0.13.0 and 0.14.0, restructured release package structure&lt;br /&gt;
*[[FlightGear_Newsletter_June_2021]]: 0.14.1 announced, updater bugfixes&lt;br /&gt;
*[[FlightGear_Newsletter_July_2021]]: 0.14.2 announced, updater bugfixes part II&lt;br /&gt;
*[[FlightGear_Newsletter_January_2022]]: '''1.0.0 released, Mumble 1.4 hit the light'''&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fgcom-mumble_statuspage-0.6.0.png|Statuspage 0.6.0&lt;br /&gt;
FGCom-mumble_radioGUI-0.6.0.png|RadiGUI 0.6.0&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Idea to integrate into FGFS ==&lt;br /&gt;
{{progressbar|10|10}} {{pending}}&lt;br /&gt;
&lt;br /&gt;
ML Discussion: https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/1919A28D-44D8-46F0-8A65-A5633A8AB743%40hallinger.org/#msg58717212&lt;br /&gt;
&lt;br /&gt;
Using [https://github.com/mumble-voip/libmumble libmumble], a standalone mumble c++17 library, we could integrate FGCom-mumble directly into FlightGear. This way, FGFS would talk &amp;quot;mumble&amp;quot; to a mumble server and the plugins functions would be integrated into the core. For pilots, a simple &amp;quot;click&amp;quot; to connect in the multiplayer would be enough to participate, while having all the advanced features of fgcom-mumble available (like custom NDBs, radio stations; as well as the possibility for other clients (ATC!) to participate easily on the radio spectrum).&lt;br /&gt;
&lt;br /&gt;
A main idea is also to use the existing fgcom-mumble code to avoid double work. But otoh maybe a direct rewrite of the core stuff may be cleaner; most of the magic is in the fgcom-mumble radio model code anyway, so we might just use some bits, if that is possible?&lt;br /&gt;
&lt;br /&gt;
libmubmble is not yet API-stable (but should be working), but there was already a [https://github.com/mumble-voip/libmumble/issues/18 first dicussion] about feasability and basic mechanics:&lt;br /&gt;
* From FGCom-mumbles side, we need to integrate the data structures into the core. So radios need to be registered, etc. This should not be too hard&lt;br /&gt;
** we probably just need to not run the UPD-Server but send the needed data directly into the decoding function of it. At a later stage, we might better integrate that part, but for a first working solution, just creatig a FCGOM-mumble UDP-Packet string in FGFS and sending it periodically (or already on-demand?) into the udp-servers decoder function should be enough - it just creates some CPU overhead which should not be too bad and will establish the needed local data structure.&lt;br /&gt;
** Note, that we cannot rely on the mpservers data structures (even if there is radio data), because in FGCom-mumble potential other clients are also participating (like radio-playback bots for ATIS etc!). So we really need to use mumbles plugin messages.&lt;br /&gt;
* Basicly the libmumble will run its own threads for networking. Upon receiving mumble audio or mumble-plugin data, callback functions would be called from the lib (https://github.com/mumble-voip/libmumble/issues/18#issuecomment-1868498537):&lt;br /&gt;
** Incoming audio data need to be processed by the fgcom-mumble plugin functions, and then the result handed over into fgfs audio out handling.&lt;br /&gt;
** Incoming plugin data needs to be fed into the fgcom-mumble internal remote data struct (just hand the data into the existing data parser).&lt;br /&gt;
* Pressing the already existing fgfs PTT button&lt;br /&gt;
** would need to send plugin data to mumble, to inform other clients. This is currently done by calling a mumble client function. It would probably be enough, if fgfs core supplied an implemention that calls the appropriate libmumble function and hands over the data.&lt;br /&gt;
** also, the audio data needs to be fetched from the mic, and then handed over to libmumbles audio encoding and sending routine. This probably can somewhat be partly copied from the legacy fgcom implementation.&lt;br /&gt;
* Questions regarding fgfs currently are:&lt;br /&gt;
** {{tick}} (''Answer:'' use [[Howto:Create_new_subsystems|Subsystem]]) how to exactly the integration on fgfs side works. That needs peeks on fgcoms code as well as some discussion at the mailing list.&lt;br /&gt;
** how to integrate the libmubmle code into the fgfs build chain (its cmake).&lt;br /&gt;
*** {{tick}} legally: libmubmle has a [https://github.com/mumble-voip/libmumble/blob/master/LICENSE BSD 3-clause] licence, is that compatible?&lt;br /&gt;
*** {{tick}} And what about libmubmles dependencies, like OpenSSL?&lt;br /&gt;
*** technically, how to include that all into the existing build system?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FGCom]]&lt;br /&gt;
[[Category:Air Traffic Control]]&lt;br /&gt;
&lt;br /&gt;
[[de:FGCom-mumble]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Aircraft_maintenance&amp;diff=140822</id>
		<title>Aircraft maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Aircraft_maintenance&amp;diff=140822"/>
		<updated>2024-10-25T07:19:30Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Attitude indicator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some [[Bugs|bugfixes]] and improvements require [[aircraft]] to be adapted/fixed to remain airworthy, to be working correctly, or to be taking full advantage of latest [[FlightGear]] version. The following ''Airworthiness Directives'' and ''Aviation Maintenance Alerts'' issued by the ''FlightGear Aviation Administration'' (FAA) should be considered for aircraft maintenance (A/B/C/D checks).&lt;br /&gt;
&lt;br /&gt;
== JSBSim ==&lt;br /&gt;
=== Deprecated engine properties &amp;quot;egt_degc&amp;quot; and &amp;quot;egt_degf&amp;quot; ===&lt;br /&gt;
Properties will be removed with a future [[JSBSim]]/FlightGear version. Replace &amp;quot;_&amp;quot; with &amp;quot;-&amp;quot;, i.e. use:&lt;br /&gt;
  /engines/engine[..]/egt-degc&lt;br /&gt;
  /engines/engine[..]/egt-degf&lt;br /&gt;
&lt;br /&gt;
=== Ground reactions ===&lt;br /&gt;
As of FlightGear 3.1 JSBSim, just like YASim, supports ground effects like bumpiness, solid-ground detection and adjusting of friction actors. Actually JSBSim supports an extra feature, BOGEY contact points sink in a non-solid ground surface but STRUCTURE contact point do not, making it easy to define floats using STRUCTURE contact points.&lt;br /&gt;
&lt;br /&gt;
See [http://forum.flightgear.org/viewtopic.php?f=66&amp;amp;t=22037 this forum topic] for more details and instructions on how to update your aircraft.&lt;br /&gt;
&lt;br /&gt;
== Tanks ==&lt;br /&gt;
With &amp;gt;= FG2.4.0 the properties for mass, volume and density are interconnected and so are those representing the same property with just individual units.  Aircraft should only set either mass or volume manually (i.e. on start-up), and NOT try to configure or compute both.&lt;br /&gt;
The fuel density has to be defined at start up or it defaults to 755kg/m^3 (Avgas).&lt;br /&gt;
Volume is derived from mass and vice versa. The last set property wins. The used formula is &lt;br /&gt;
 mass = volume * density&lt;br /&gt;
or it's variation&lt;br /&gt;
 volume = mass / density&lt;br /&gt;
Internally, content(mass), density(mass per volume), capacity(volume) and the unusable fuel(volume) are stored in metric units and the (US-)English units are derived by applying hard-coded conversion factors:&lt;br /&gt;
* LBS_PER_KG = 2.20462262&lt;br /&gt;
* KG_PER_LBS = 1.0/LBS_PER_KG&lt;br /&gt;
* USGAL_PER_M3 = 1000.0/3.785411784&lt;br /&gt;
* M3_PER_USGAL = 1.0/USGAL_PER_M3&lt;br /&gt;
* IMPGAL_PER_M3 = 1000.0/4.54609&lt;br /&gt;
* M3_PER_IMPGAL = 1.0/IMPGAL_PER_M3&lt;br /&gt;
No property-value can ever become less than zero. Division by zero errors (e.g. if density=0.0) are internally avoided.&lt;br /&gt;
&lt;br /&gt;
The value of the property &amp;quot;unusable-xxx&amp;quot; is constantly compared against &amp;quot;content-xxx&amp;quot; and drives the value of the boolean property &amp;quot;empty&amp;quot;. If content is less than usable, empty is true.&lt;br /&gt;
&lt;br /&gt;
All the individual tanks are summed up to the properties /consumables/fuel/total-fuel-xxx&lt;br /&gt;
&lt;br /&gt;
=== Aircraft developer's best practice ===&lt;br /&gt;
To create and initialize the tank properties for you aircraft, define your basic set of properties for each tank in your aircraft's -set.xml:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;consumables&amp;gt;&lt;br /&gt;
    &amp;lt;fuel&amp;gt;&lt;br /&gt;
      &amp;lt;tank n=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;Left Wing&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;capacity-gal_us type=&amp;quot;double&amp;quot;&amp;gt;64.0&amp;lt;/capacity-gal_us&amp;gt;&lt;br /&gt;
        &amp;lt;unusable-gal_us type=&amp;quot;double&amp;quot;&amp;gt;2.5&amp;lt;/unusable-gal_us&amp;gt;&lt;br /&gt;
        &amp;lt;level-gal_us type=&amp;quot;double&amp;quot;&amp;gt;50&amp;lt;/level-gal_us&amp;gt;&lt;br /&gt;
      &amp;lt;/tank&amp;gt;&lt;br /&gt;
      &amp;lt;tank n=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;Right Wing&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;capacity-gal_us type=&amp;quot;double&amp;quot;&amp;gt;64.0&amp;lt;/capacity-gal_us&amp;gt;&lt;br /&gt;
        &amp;lt;unusable-gal_us type=&amp;quot;double&amp;quot;&amp;gt;2.5&amp;lt;/unusable-gal_us&amp;gt;&lt;br /&gt;
        &amp;lt;level-gal_us type=&amp;quot;double&amp;quot;&amp;gt;50&amp;lt;/level-gal_us&amp;gt;&lt;br /&gt;
      &amp;lt;/tank&amp;gt;&lt;br /&gt;
    &amp;lt;/fuel&amp;gt;&lt;br /&gt;
  &amp;lt;/consumables&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This will initialize and maintain /consumables/fuel/tank[0..1]/*&lt;br /&gt;
&lt;br /&gt;
Alternatively, just define the number of tanks and fill in the values later (e.g. from Nasal):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;consumables&amp;gt;&lt;br /&gt;
    &amp;lt;fuel&amp;gt;&lt;br /&gt;
      &amp;lt;numtanks&amp;gt;32&amp;lt;/numtanks&amp;gt;&lt;br /&gt;
    &amp;lt;/fuel&amp;gt;&lt;br /&gt;
  &amp;lt;/consumables&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will initialize and maintain /consumables/fuel/tank[0..31]/*&lt;br /&gt;
&lt;br /&gt;
Note: if /consumables/fuel/numtanks exist and at least one /consumables/fuel/tank exist, the latter takes precedence over numtanks.&lt;br /&gt;
&lt;br /&gt;
== Instruments ==&lt;br /&gt;
=== Realistic NAV radio ===&lt;br /&gt;
With &amp;gt;= FG2.6.0 the NAV and DME radios are more realistic. Signals are &amp;quot;flickering&amp;quot; when at the edge of a station's range. The properties&lt;br /&gt;
    /instrumentation/dme/in-range&lt;br /&gt;
    /instrumentation/nav/in-range&lt;br /&gt;
may flicker on-off-on-... frequently. Some autopilots (mainly airliners) try to capture a localizer as soon as a NAV station is &amp;quot;in-range&amp;quot;, which results in an issue when signal isn't stable yet. As a work-around, only use the properties above to enable/disable the NAV/DME cockpit display (to get the realistic display flickering effect), but use the property&lt;br /&gt;
    /instrumentation/nav/signal-quality-norm&lt;br /&gt;
to detect a valid signal for the autopilot's capture logic, e.g. add a condition that requires a high signal strength, say above 0.9, to avoid capturing too early while the signal is still unstable.&lt;br /&gt;
&lt;br /&gt;
=== DME vs NAV radio ===&lt;br /&gt;
Aircraft with DME displays must include a DME instrument. With &amp;lt;=FG2.4.0 is was enough to add a &amp;quot;nav&amp;quot; instrument in order to also get some DME properties - this is deprecated.&lt;br /&gt;
Add the DME instrument:&lt;br /&gt;
    &amp;lt;dme&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;dme&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;/dme&amp;gt;&lt;br /&gt;
The use of the NAV radio's DME properties is also deprecated. Instead of&lt;br /&gt;
    /instrumentation/nav/dme-in-range&lt;br /&gt;
use&lt;br /&gt;
    /instrumentation/dme/in-range&lt;br /&gt;
The deprecated DME properties are still supported with FG2.6.0, but will be removed with a later version.&lt;br /&gt;
&lt;br /&gt;
=== Incorrect DME range displayed ===&lt;br /&gt;
Many aircraft (mainly airliners) do not display the correct DME distance.&lt;br /&gt;
To obtain the correct DME distance, use DME instrument properties - not the nav instrument's properties. For DMEs, do '''not''' use:&lt;br /&gt;
 /instrumentation/nav/nav-distance&lt;br /&gt;
which does not reflect the correct DME distance. Instead use&lt;br /&gt;
 /instrumentation/dme/indicated-distance-nm&lt;br /&gt;
&lt;br /&gt;
=== DME/NAV display beyond station range ===&lt;br /&gt;
Many aircraft (mainly airliners) display DME and/or NAV information, even though the DME/VOR/ILS is out of range - or even when the selected station doesn't even provide DME/NAV information - which is not realistic. NAV/DME displays should have a condition respecting&lt;br /&gt;
 /instrumentation/dme/in-range&lt;br /&gt;
for DME displays and a condition on&lt;br /&gt;
 /instrumentation/nav/in-range&lt;br /&gt;
for NAV/ILS displays, and otherwise blank/disable the distance/direction/display.&lt;br /&gt;
&lt;br /&gt;
=== Attitude indicator ===&lt;br /&gt;
The FG attitude indicator supports [http://en.wikipedia.org/wiki/Attitude_indicator caging], usually triggered by a push/pull switch next to the attitude indicator. The correct property name of FG's attitude indicator instrument is named&lt;br /&gt;
 /instrumentation/attitude-indicator/caged-flag&lt;br /&gt;
Apparently a copy &amp;amp; paste issue has resulted in a large number of FlightGear aircraft incorrectly using the property&lt;br /&gt;
 /instrumentation/attitude-indicator/caged&lt;br /&gt;
which has no effect. &amp;quot;caged&amp;quot; should be replaced by &amp;quot;caged-flag&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Heading Indicator ===&lt;br /&gt;
There are two implementations:&lt;br /&gt;
* A basic one: https://wiki.flightgear.org/Instrumentation#Heading_Indicator_(Suction-Driven)&lt;br /&gt;
* A advanced and very configurable one: https://wiki.flightgear.org/Instrumentation#Heading_Indicator_(Directional_Gyro)&lt;br /&gt;
&lt;br /&gt;
Migrating from the former to the latter is basicly just a matter of switching the instrumentation.xml tag name.&lt;br /&gt;
You probably also need to tie the adjustment knob to the new property &amp;lt;code&amp;gt;align-deg&amp;lt;/code&amp;gt; and look trough the available config options to set the behaviour (for example for tumbling etc)&lt;br /&gt;
&lt;br /&gt;
== Sound ==&lt;br /&gt;
=== Stereo sound files unsupported ===&lt;br /&gt;
Stereo sound files can not (/no longer) be used for sound effects and must be converted to mono. Proper sound effects always required single channel wave sources. A 3D sound engine uses information on position, direction, speed of every source to ''render'' realistic 3D sound. This does '''not''' work with stereo files, since both channels would be rendered at the same position (no stereo effect anyway). Stereo files were usable with &amp;lt;=FG2.4.0, but resulted in many effects being broken (Doppler etc). To avoid such issues, &amp;gt;= FG2.6.0 produces a warning and rejects loading stereo files.&lt;br /&gt;
&lt;br /&gt;
=== Avoiding sound file duplication ===&lt;br /&gt;
We have a large number of sound file duplicates in the FG repositories, which blow up the repository and download size. Generic sound files should be placed in the central /fgdata/Sound folder - and not be copied by individual aircraft. Check if a sound sample is available in the central &amp;quot;Sounds&amp;quot; folder, before copying it into an aircraft. New generic sounds may also be submitted to the central folder (use &amp;quot;git merge request&amp;quot; or mailing list) - which is better than producing loads of duplicates.&lt;br /&gt;
&lt;br /&gt;
== FlightRecorder ==&lt;br /&gt;
{{Main article|Instant Replay}}&lt;br /&gt;
The default FlightGear flight recorder matches propeller/piston aircraft only. For &amp;gt;= FG2.6.0 the correct flight recorder configuration file matching the aircraft type should be selected. It is also possible to add custom properties.&lt;br /&gt;
&lt;br /&gt;
== Rating System ==&lt;br /&gt;
{{Main article|Formalizing Aircraft Status}}&lt;br /&gt;
A new status rating system was introduced. Aircraft ratings should be encoded in the aircraft -set.xml file from where they are be picked up by launchers like FGRun, web pages etc.&lt;br /&gt;
&lt;br /&gt;
== Parking positions ==&lt;br /&gt;
The new &amp;lt;tt&amp;gt;--parkpos=AVAILABLE&amp;lt;/tt&amp;gt; option selects a fitting parking position, based on the dimensions, class and operator of the aircraft. The following lines should be added to the &amp;lt;sim&amp;gt; part of the aircraft's -set.xml.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;dimensions&amp;gt;&lt;br /&gt;
   &amp;lt;radius-m type=&amp;quot;double&amp;quot;&amp;gt;10.0&amp;lt;/radius-m&amp;gt;&lt;br /&gt;
   &amp;lt;parkpos-offset-m type=&amp;quot;double&amp;quot;&amp;gt;0.0&amp;lt;/parkpos-offset-m&amp;gt;&lt;br /&gt;
  &amp;lt;/dimensions&amp;gt;&lt;br /&gt;
  &amp;lt;aircraft-class type=&amp;quot;string&amp;quot;&amp;gt;mil-fighter&amp;lt;/aircraft-class&amp;gt;&lt;br /&gt;
  &amp;lt;aircraft-operator&amp;gt;&amp;lt;/aircraft-operator&amp;gt;&lt;br /&gt;
  &amp;lt;aircraft-data&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;/sim/dimensions/radius-m&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;/sim/dimensions/parkpos-offset-m&amp;lt;/path&amp;gt; &amp;lt;!-- Note that as of 2020-12, support for parkpos-offset-m has never been implemented. --&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;/sim/aircraft-class&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;/sim/aircraft-operator&amp;lt;/path&amp;gt;&lt;br /&gt;
  &amp;lt;/aircraft-data&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Instrumentation&amp;diff=140448</id>
		<title>Instrumentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Instrumentation&amp;diff=140448"/>
		<updated>2024-09-09T07:50:45Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Magnetic Compass */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FlightGear's built-in '''Instrumentation system''' simulates basic instruments used in many aircraft and provide their output as [[Property|Properties]] to be used e.g. for [[Howto:Animate models|animating]] 3D instruments or [[Canvas]] instruments. &lt;br /&gt;
&lt;br /&gt;
This article is meant to provide an overview over the instrumentation modules available and their configuration. &lt;br /&gt;
&lt;br /&gt;
=== General configuration ===&lt;br /&gt;
The instrumentation modules to be available to an aircraft can be selected by the aircraft developer using an instrumentation XML configuration file. This file is called from the [[Aircraft-set.xml]]:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;instrumentation&amp;gt;&lt;br /&gt;
    &amp;lt;path&amp;gt;Systems/my-aircraft-instrumentation.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
  &amp;lt;/instrumentation&amp;gt;&lt;br /&gt;
&amp;lt;/sim&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A generic configuration file to be copied and customised can be found in Aircraft/Generic/generic-instrumentation.xml.&lt;br /&gt;
&lt;br /&gt;
===== Common Elements =====&lt;br /&gt;
Instrument Root Path: typically '''/instrumentation/name[number]/''' e.g. '''/instrumentation/adf[1]/''' for the second ADF.&lt;br /&gt;
&lt;br /&gt;
Electric Power Path (where applicable):  typically '''/systems/electrical/outputs/name[number]''' e.g. '''/systems/electrical/outputs/comm[0]''' for the first comm radio.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|name&lt;br /&gt;
|typically used for the instrument's root path  and, where applicable, electric power path&lt;br /&gt;
|-&lt;br /&gt;
|number&lt;br /&gt;
|used to differentiate between multiple objects using the same name. &lt;br /&gt;
|}&lt;br /&gt;
All instruments that inherit '''AbstractInstrument''' additionally accept the following config settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|power-supply&lt;br /&gt;
|custom property to be used as the electric power path&lt;br /&gt;
|-&lt;br /&gt;
|minimum-supply-volts&lt;br /&gt;
|minimum electric voltage at which the instrument works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Instrument Modules ===&lt;br /&gt;
&lt;br /&gt;
====[[ADF|ADF (Automatic Direction Finder)]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/adf.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/adf.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
This instrument simulates an [[ADF|Automatic Direction Finder]] used for navigating using [[NDB|Non-Directional Beacons]].&lt;br /&gt;
&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;adf&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;adf&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/adf&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[Airspeed|Airspeed Indicator]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/airspeed_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/airspeed_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;airspeed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;airspeed-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;total-pressure&amp;gt;/systems/pitot/total-pressure-inhg&amp;lt;/total-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;has-overspeed-indicator&amp;gt;0&amp;lt;/has-overspeed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;pressure-alt-source&amp;gt;/instrumentation/altimeter/pressure-alt-ft&amp;lt;/pressure-alt-source&amp;gt;&lt;br /&gt;
    &amp;lt;ias-limit&amp;gt;248.0&amp;lt;/ias-limit&amp;gt;&lt;br /&gt;
    &amp;lt;mach-limit&amp;gt;0.48&amp;lt;/mach-limit&amp;gt;&lt;br /&gt;
    &amp;lt;alt-threshold&amp;gt;13200&amp;lt;/alt-threshold&amp;gt;&lt;br /&gt;
&amp;lt;/airspeed-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Total Pressure: see [[FGproperties/Systems/Pitot]]&lt;br /&gt;
*Static Pressure: see [[FGproperties/Systems/static]]&lt;br /&gt;
*see also: {{Repo link|repo=fgdata|pre=$FG_ROOT|path=Docs/README.airspeed-indicator}}&lt;br /&gt;
&lt;br /&gt;
====[[Altimeter]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/altimeter.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/altimeter}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;altimeter&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;altimeter&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;quantum&amp;gt;0&amp;lt;/quantum&amp;gt;&lt;br /&gt;
    &amp;lt;tau&amp;gt;0&amp;lt;/tau&amp;gt;&lt;br /&gt;
&amp;lt;/altimeter&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Static Pressure: see [[FGproperties/Systems/static]]&lt;br /&gt;
*Quantum: TODO&lt;br /&gt;
* Tau: TODO&lt;br /&gt;
&lt;br /&gt;
====[[Attitude indicator|Attitude Indicator (suction-powered)]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;attitude-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;attitude-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-vacuum&amp;gt;4.5&amp;lt;/minimum-vacuum&amp;gt;&lt;br /&gt;
    &amp;lt;limits&amp;gt;&lt;br /&gt;
      &amp;lt;spin-thresh&amp;gt;0.8&amp;lt;/spin-thresh&amp;gt; &amp;lt;!-- below this gyro spin, instrument will lag, depending on the pitch/roll config below --&amp;gt;&lt;br /&gt;
      &amp;lt;max-roll-error-deg&amp;gt;40.&amp;lt;/max-roll-error-deg&amp;gt;&lt;br /&gt;
      &amp;lt;max-pitch-error-deg&amp;gt;12.0&amp;lt;/max-pitch-error-deg&amp;gt;&lt;br /&gt;
    &amp;lt;/limits&amp;gt;&lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
&amp;lt;/attitude-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note, the &amp;lt;code&amp;gt;&amp;lt;minimum-vacuum&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;gyro&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;limits&amp;gt;&amp;lt;/code&amp;gt; sections are optional. The defaults given in c++ are for demonstration and not realistic.&lt;br /&gt;
*Suction: see [[Aircraft systems#Vacuum]]&lt;br /&gt;
&lt;br /&gt;
====Attitude Indicator (Electric)====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator_electric.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator_electric.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;attitude-indicator-electric&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;attitude-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- optional configs, given with defaults --&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
        &amp;lt;spin-thresh&amp;gt;0.8&amp;lt;/spin-thresh&amp;gt; &amp;lt;!-- below this gyro spin, instrument will lag, depending on the pitch/roll config below --&amp;gt;&lt;br /&gt;
        &amp;lt;max-roll-error-deg&amp;gt;40.&amp;lt;/max-roll-error-deg&amp;gt;&lt;br /&gt;
        &amp;lt;max-pitch-error-deg&amp;gt;12.0&amp;lt;/max-pitch-error-deg&amp;gt;&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/attitude-indicator-electric&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Clock ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/clock.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/clock.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;clock&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;clock&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/clock&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Comm Radio ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/commradio.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/commradio.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;comm-radio&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;comm&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;eight-point-three&amp;gt;0&amp;lt;/eight-point-three&amp;gt;&lt;br /&gt;
&amp;lt;/comm-radio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eight-point-three: Setting this to 1 (true) enables a simulation of the newer 8.33 kHz frequency raster&lt;br /&gt;
* see also [[Kx165]]&lt;br /&gt;
&lt;br /&gt;
==== DCL GPS ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dclgps.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dclgps.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Information (from Source Code)'''&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
// dclgps.cxx - a class to extend the operation of FG's current GPS&lt;br /&gt;
// code, and provide support for a KLN89-specific instrument.  It&lt;br /&gt;
// is envisioned that eventually this file and class will be split&lt;br /&gt;
// up between current FG code and new KLN89-specific code and removed.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Distance measuring equipment|DME (Distance Measuring Equipment)]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dme.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dme.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dme&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;dme&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/dme&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Global Positioning System|GPS (Global Positioning System)]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gps.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gps.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gps&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;gps&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/gps&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GSDI/GSDA (Ground Speed Drift Angle Indicator) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gsdi.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gsdi.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gsdi&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;gsdi&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/gsdi&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;This instrument configuration is not included in generic-instrumentation.xml. See the [[EC130]] for an aircraft implementing this instrument.&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Directional Gyro|Heading Indicator (Directional Gyro)]] ====&lt;br /&gt;
&lt;br /&gt;
This is a realistic and highly configrable directional gyro based heading indicator. It can be either electrical or&lt;br /&gt;
suction driven and supports the gyro based errors like precession drift and transport wander.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_dg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_dg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Configuration'''&lt;br /&gt;
&lt;br /&gt;
By default, the instrument is electrically driven and powered by '''/systems/electrical/outputs/DG[number]''' (for backwards-compatibility reasons)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Like with most other electrically driven instruments you can explicitely set the power source:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;power-supply&amp;gt;/systems/electrical/outputs/heading-indicator&amp;lt;/power-supply&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-supply-volts&amp;gt;12.0&amp;lt;/minimum-supply-volts&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make it vacuum driven instead:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-vacuum&amp;gt;4.0&amp;lt;/minimum-vacuum&amp;gt;  &amp;lt;!-- from this inHg suction on the spin will reach 100% --&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can optionally configure the instruments error behaviour and limits (to disable, set accordingly).&lt;br /&gt;
The defaults given in c++ are for demonstration and not realistic so these might be better:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;limits&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-limit-rate&amp;gt;11.5&amp;lt;/yaw-limit-rate&amp;gt;       &amp;lt;!-- about 55° bank; +- this yaw rate (deg/s) and the gyro will accumulate errors --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-lower&amp;gt;-0.8&amp;lt;/g-limit-lower&amp;gt;         &amp;lt;!-- exceeding lower G limit makes gyro drag --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-upper&amp;gt;1.8&amp;lt;/g-limit-upper&amp;gt;          &amp;lt;!-- exceeding upper G limit makes gyro drag --&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-error-factor&amp;gt;0.033&amp;lt;/yaw-error-factor&amp;gt;  &amp;lt;!-- how much error out-of-limits yaw-rate (deg/s) will add --&amp;gt;&lt;br /&gt;
      &amp;lt;g-error-factor&amp;gt;0.033&amp;lt;/g-error-factor&amp;gt;      &amp;lt;!-- how much error out-of-limits G-forces will add --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-tumble-factor&amp;gt;1.5&amp;lt;/g-limit-tumble-factor&amp;gt; &amp;lt;!-- exceeding g-limit-upper/lower by this factor will make the gyro tumble --&amp;gt;&lt;br /&gt;
      &amp;lt;g-node&amp;gt;/accelerations/pilot-gdamped&amp;lt;/g-node&amp;gt;  &amp;lt;!-- optionally read the g force for the limits from here --&amp;gt;&lt;br /&gt;
      &amp;lt;g-filter-time&amp;gt;10.0&amp;lt;/g-filter-time&amp;gt;         &amp;lt;!-- damping value for internal g node damping. use 0  to disable --&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-rate-source&amp;gt;/orientation/yaw-rate-degps&amp;lt;/yaw-rate-source&amp;gt; &amp;lt;!-- optional read the yaw-rate from here --&amp;gt;&lt;br /&gt;
    &amp;lt;/limits&amp;gt;&lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;minimum-spin-norm&amp;gt;0.8&amp;lt;/minimum-spin-norm&amp;gt;  &amp;lt;!-- min. spin to not let the gyro lag when changing heading --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
    &amp;lt;heading-source&amp;gt;/orientation/heading-deg&amp;lt;/heading-source&amp;gt; &amp;lt;!-- alternate source for the heading value --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instrument has a built-in damping filter for the g-node, so spikes do not trigger tumbling. If tuning this is not sufficient, you can specify a custom source property.&lt;br /&gt;
&lt;br /&gt;
'''Runtime configuration'''&lt;br /&gt;
The limits and gyro config are exposed to the instruments propoerty tree and can be changed at runtime.&lt;br /&gt;
&lt;br /&gt;
The following proerties are also exposed for runtime configuration:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;caged-flag&amp;lt;/code&amp;gt;&lt;br /&gt;
|Make the gyro caged. Use this to quickly stop tumbling (or prevent it in the first instance).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;align-deg&amp;lt;/code&amp;gt;&lt;br /&gt;
|Should be used by the instruments model to rotate the disc, countering instrument errors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;latitude-nut-setting&amp;lt;/code&amp;gt;&lt;br /&gt;
|Set to the factory setting. At the nut's latitutde (&amp;lt;code&amp;gt;-90&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;) the precession by earths rotation is countered by a small weight on the gimbal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[Avionics and instruments#Directional Gyro|Heading Indicator (Electric Flux-Gate Compass)]]====&lt;br /&gt;
The flux-gate heading indicator always points to magnetic north automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_fg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_fg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-fg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator-fg&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-fg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Powered by '''/systems/electrical/outputs/heading-indicator-fg[number]'''&lt;br /&gt;
&lt;br /&gt;
==== Heading Indicator (Suction-Driven) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading-indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading-indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following proerties are also exposed for runtime configuration:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;offset-deg&amp;lt;/code&amp;gt;&lt;br /&gt;
|Read/write; Gyro drift is reflected in this property, and can be countered by altering the value. If not initialized at instrument init time, will be synced to &amp;quot;/environment/magnetic-variation-deg&amp;quot; automatically.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Note, this is an unrealistic/simple instrument. For better realism options, you should use the &amp;quot;Heading Indicator (Directional Gyro)&amp;quot;, see above.&lt;br /&gt;
&lt;br /&gt;
* Suction: see [[Aircraft systems#Vacuum]]&lt;br /&gt;
&lt;br /&gt;
==== King KR 87 Digital ADF (Automatic Direction Finder) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/kr_87.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/kr_87.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;KR-87&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;kr-87&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/KR-87&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Compass|Magnetic Compass]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mag_compass.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mag_compass.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;magnetic-compass&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;magnetic-compass&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
	&amp;lt;!--	Deviation table, matches deviation table texture	--&amp;gt;&lt;br /&gt;
	&amp;lt;deviation&amp;gt;&lt;br /&gt;
		&amp;lt;table&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;0&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;1&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;30&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;3&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
                        &amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;330&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;-2&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
		&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;/deviation&amp;gt;&lt;br /&gt;
&amp;lt;/magnetic-compass&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Deviation Table: This can be used to simulate [[Avionics and instruments#Magnetic deviation|Magnetic deviation]], e.g. to reflect what's written on a textured deviation card next to the compass. Can also be a property that is beeing read and dynamically calculated (&amp;lt;code&amp;gt;&amp;lt;deviation&amp;gt;/instrumentation/magnetic-compass/deviation-deg&amp;lt;/deviation&amp;gt;&amp;lt;/code&amp;gt;), for example to implement powered avionics influencing the magnetic field.&lt;br /&gt;
&lt;br /&gt;
By default the compass simulates a fixed axis compass disc pitched at 0°. A pitched compass disc has an additional reading error.&lt;br /&gt;
The compass property tree exposes a &amp;lt;code&amp;gt;/instrumentation/magnetic-compass/pitch-offset-deg&amp;lt;/code&amp;gt; prop that can be set to a fixed pitch angle to simulate pitched mounts or manually pitchable compass casings. By dynamically calculating the property, you can offset the plane's &amp;lt;code&amp;gt;/orientation-pitch-deg&amp;lt;/code&amp;gt;, essentially nulling the effect. By adding some filters you can simulate a freely pitchable compass disc for a constrained pitch angle; that is: a compass disc mounted on a pivot-pin bearing (like most modern compasses feature). For an example see the [https://github.com/c172p-team/c172p/blob/a8bc43674af51cfe093c03ae21e2e84467b456fb/Systems/instruments.xml#L599-L802 filter implementation from the C172p].&lt;br /&gt;
&lt;br /&gt;
The instrument exposes &amp;lt;code&amp;gt;pitch-deg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;roll-deg&amp;lt;/code&amp;gt; properties to simulate pitching and rolling of the compass disc based on flight forces and fluid viscosity.&lt;br /&gt;
You can use them in your 3D-models animation configs.&lt;br /&gt;
&lt;br /&gt;
The damping can be adjusted by setting it in the instrumentation.xml config:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fluid-viscosity type=&amp;quot;double&amp;quot;&amp;gt;8.2&amp;lt;/fluid-viscosity&amp;gt;&amp;lt;/code&amp;gt; (8.2 mm²/s is the value of kerosene and should be good in most cases).&lt;br /&gt;
&lt;br /&gt;
==== [[Radio beacons#Marker beacons|Marker Beacon]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/marker_beacon.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/marker_beacon.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;marker-beacon&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;marker-beacon&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/marker-beacon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Ground proximity warning system|MK-VIII]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mk_viii.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mk_viii.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;mk-viii&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;mk-viii&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/mk-viii&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For more information, see [[Ground proximity warning system]].&lt;br /&gt;
&lt;br /&gt;
==== Master Reference Gyro ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mrg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mrg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;master-reference-gyro&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;master-reference-gyro&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/master-reference-gyro&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;for more information, see [https://scottbouch.com/mcfs/lightningt5t55/docs/ap101b-1003-5-6-15a-part1-chap7-al2-nov84-instruments.pdf Lightning T Mk.5 Instruments PDF, p. 4f.]&lt;br /&gt;
&lt;br /&gt;
==== Navigation Radio ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/navradio.cxx}},{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/newnavradio.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/navradio.hxx}},{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/newnavradio.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nav-radio&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;nav&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/nav-radio&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Radar Altimeter ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/rad_alt.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/rad_alt.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;radar-altimeter&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;radar-altimeter&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;update-interval-sec&amp;gt;0.1&amp;lt;/update-interval-sec&amp;gt;&lt;br /&gt;
&amp;lt;/radar-altimeter&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Turn Coordinator|Slip/Skid Ball]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/slip_skid_ball.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/slip_skid_ball.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;slip-skid-ball&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;slip-skid-ball&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/slip-skid-ball&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Tactical Air Navigation|TACAN]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tacan.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tacan.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tacan&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;tacan&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/tacan&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Traffic alert and collision avoidance system|TCAS]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tcas.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tcas.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
For '''configuration''', see [[Traffic alert and collision avoidance system#Instrument List]]&lt;br /&gt;
&lt;br /&gt;
==== [[Transponder]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/transponder.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/transponder.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;transponder&amp;gt;&lt;br /&gt;
    &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;transponder&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number type=&amp;quot;int&amp;quot;&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-supply-volts type=&amp;quot;double&amp;quot;&amp;gt;8.0&amp;lt;/minimum-supply-volts&amp;gt;&lt;br /&gt;
    &amp;lt;mode type=&amp;quot;int&amp;quot;&amp;gt;1&amp;lt;/mode&amp;gt;&lt;br /&gt;
    &amp;lt;auto-ground type=&amp;quot;string&amp;quot;&amp;gt;/gear/gear/wow&amp;lt;/auto-ground&amp;gt;&lt;br /&gt;
    &amp;lt;encoder-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/altimeter&amp;lt;/encoder-path&amp;gt;&lt;br /&gt;
    &amp;lt;airspeed-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/airspeed-indicator/indicated-speed-kt&amp;lt;/airspeed-path&amp;gt;&lt;br /&gt;
    &amp;lt;mach-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/airspeed-indicator/indicated-mach&amp;lt;/mach-path&amp;gt;&lt;br /&gt;
    &amp;lt;kt70-compatibility type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/kt70-compatibility&amp;gt;&lt;br /&gt;
&amp;lt;/transponder&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Mode&lt;br /&gt;
** 0 = Mode A&lt;br /&gt;
** 1 = Mode C&lt;br /&gt;
** 2 = Mode S&lt;br /&gt;
* Auto-Ground: Set property to be used to detect when the ground-bit (mode-S only) should be set&lt;br /&gt;
* Encoder/Airspeed/Mach Path: Set instrument properties to feed the transponder&lt;br /&gt;
* '''for more information, see [[Transponder]].'''&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Turn Coordinator|Turn Indicator]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/turn_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/turn_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;turn-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;turn-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
&amp;lt;/turn-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note, the &amp;lt;code&amp;gt;&amp;lt;gyro&amp;gt;&amp;lt;/code&amp;gt; sections are optional. The defaults given in c++ are for demonstration and not realistic.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Speed Indicator (VSI) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/vertical_speed_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/vertical_speed_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;vertical-speed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;vertical-speed-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
&amp;lt;/vertical-speed-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Static Pressure: see [[FGproperties/Systems/static]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Instrumentation&amp;diff=140447</id>
		<title>Instrumentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Instrumentation&amp;diff=140447"/>
		<updated>2024-09-09T07:42:02Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Heading Indicator (Directional Gyro) */ See: https://sourceforge.net/p/flightgear/codetickets/2900/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FlightGear's built-in '''Instrumentation system''' simulates basic instruments used in many aircraft and provide their output as [[Property|Properties]] to be used e.g. for [[Howto:Animate models|animating]] 3D instruments or [[Canvas]] instruments. &lt;br /&gt;
&lt;br /&gt;
This article is meant to provide an overview over the instrumentation modules available and their configuration. &lt;br /&gt;
&lt;br /&gt;
=== General configuration ===&lt;br /&gt;
The instrumentation modules to be available to an aircraft can be selected by the aircraft developer using an instrumentation XML configuration file. This file is called from the [[Aircraft-set.xml]]:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;instrumentation&amp;gt;&lt;br /&gt;
    &amp;lt;path&amp;gt;Systems/my-aircraft-instrumentation.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
  &amp;lt;/instrumentation&amp;gt;&lt;br /&gt;
&amp;lt;/sim&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A generic configuration file to be copied and customised can be found in Aircraft/Generic/generic-instrumentation.xml.&lt;br /&gt;
&lt;br /&gt;
===== Common Elements =====&lt;br /&gt;
Instrument Root Path: typically '''/instrumentation/name[number]/''' e.g. '''/instrumentation/adf[1]/''' for the second ADF.&lt;br /&gt;
&lt;br /&gt;
Electric Power Path (where applicable):  typically '''/systems/electrical/outputs/name[number]''' e.g. '''/systems/electrical/outputs/comm[0]''' for the first comm radio.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|name&lt;br /&gt;
|typically used for the instrument's root path  and, where applicable, electric power path&lt;br /&gt;
|-&lt;br /&gt;
|number&lt;br /&gt;
|used to differentiate between multiple objects using the same name. &lt;br /&gt;
|}&lt;br /&gt;
All instruments that inherit '''AbstractInstrument''' additionally accept the following config settings:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|power-supply&lt;br /&gt;
|custom property to be used as the electric power path&lt;br /&gt;
|-&lt;br /&gt;
|minimum-supply-volts&lt;br /&gt;
|minimum electric voltage at which the instrument works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Instrument Modules ===&lt;br /&gt;
&lt;br /&gt;
====[[ADF|ADF (Automatic Direction Finder)]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/adf.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/adf.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
This instrument simulates an [[ADF|Automatic Direction Finder]] used for navigating using [[NDB|Non-Directional Beacons]].&lt;br /&gt;
&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;adf&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;adf&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/adf&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[Airspeed|Airspeed Indicator]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/airspeed_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/airspeed_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;airspeed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;airspeed-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;total-pressure&amp;gt;/systems/pitot/total-pressure-inhg&amp;lt;/total-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;has-overspeed-indicator&amp;gt;0&amp;lt;/has-overspeed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;pressure-alt-source&amp;gt;/instrumentation/altimeter/pressure-alt-ft&amp;lt;/pressure-alt-source&amp;gt;&lt;br /&gt;
    &amp;lt;ias-limit&amp;gt;248.0&amp;lt;/ias-limit&amp;gt;&lt;br /&gt;
    &amp;lt;mach-limit&amp;gt;0.48&amp;lt;/mach-limit&amp;gt;&lt;br /&gt;
    &amp;lt;alt-threshold&amp;gt;13200&amp;lt;/alt-threshold&amp;gt;&lt;br /&gt;
&amp;lt;/airspeed-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Total Pressure: see [[FGproperties/Systems/Pitot]]&lt;br /&gt;
*Static Pressure: see [[FGproperties/Systems/static]]&lt;br /&gt;
*see also: {{Repo link|repo=fgdata|pre=$FG_ROOT|path=Docs/README.airspeed-indicator}}&lt;br /&gt;
&lt;br /&gt;
====[[Altimeter]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/altimeter.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/altimeter}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;altimeter&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;altimeter&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
    &amp;lt;quantum&amp;gt;0&amp;lt;/quantum&amp;gt;&lt;br /&gt;
    &amp;lt;tau&amp;gt;0&amp;lt;/tau&amp;gt;&lt;br /&gt;
&amp;lt;/altimeter&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Static Pressure: see [[FGproperties/Systems/static]]&lt;br /&gt;
*Quantum: TODO&lt;br /&gt;
* Tau: TODO&lt;br /&gt;
&lt;br /&gt;
====[[Attitude indicator|Attitude Indicator (suction-powered)]]====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;attitude-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;attitude-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-vacuum&amp;gt;4.5&amp;lt;/minimum-vacuum&amp;gt;&lt;br /&gt;
    &amp;lt;limits&amp;gt;&lt;br /&gt;
      &amp;lt;spin-thresh&amp;gt;0.8&amp;lt;/spin-thresh&amp;gt; &amp;lt;!-- below this gyro spin, instrument will lag, depending on the pitch/roll config below --&amp;gt;&lt;br /&gt;
      &amp;lt;max-roll-error-deg&amp;gt;40.&amp;lt;/max-roll-error-deg&amp;gt;&lt;br /&gt;
      &amp;lt;max-pitch-error-deg&amp;gt;12.0&amp;lt;/max-pitch-error-deg&amp;gt;&lt;br /&gt;
    &amp;lt;/limits&amp;gt;&lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
&amp;lt;/attitude-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note, the &amp;lt;code&amp;gt;&amp;lt;minimum-vacuum&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;gyro&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;limits&amp;gt;&amp;lt;/code&amp;gt; sections are optional. The defaults given in c++ are for demonstration and not realistic.&lt;br /&gt;
*Suction: see [[Aircraft systems#Vacuum]]&lt;br /&gt;
&lt;br /&gt;
====Attitude Indicator (Electric)====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator_electric.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/attitude_indicator_electric.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;attitude-indicator-electric&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;attitude-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- optional configs, given with defaults --&amp;gt;&lt;br /&gt;
    &amp;lt;config&amp;gt;&lt;br /&gt;
        &amp;lt;spin-thresh&amp;gt;0.8&amp;lt;/spin-thresh&amp;gt; &amp;lt;!-- below this gyro spin, instrument will lag, depending on the pitch/roll config below --&amp;gt;&lt;br /&gt;
        &amp;lt;max-roll-error-deg&amp;gt;40.&amp;lt;/max-roll-error-deg&amp;gt;&lt;br /&gt;
        &amp;lt;max-pitch-error-deg&amp;gt;12.0&amp;lt;/max-pitch-error-deg&amp;gt;&lt;br /&gt;
    &amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/attitude-indicator-electric&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Clock ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/clock.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/clock.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;clock&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;clock&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/clock&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Comm Radio ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/commradio.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/commradio.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;comm-radio&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;comm&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;eight-point-three&amp;gt;0&amp;lt;/eight-point-three&amp;gt;&lt;br /&gt;
&amp;lt;/comm-radio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* eight-point-three: Setting this to 1 (true) enables a simulation of the newer 8.33 kHz frequency raster&lt;br /&gt;
* see also [[Kx165]]&lt;br /&gt;
&lt;br /&gt;
==== DCL GPS ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dclgps.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dclgps.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Information (from Source Code)'''&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
// dclgps.cxx - a class to extend the operation of FG's current GPS&lt;br /&gt;
// code, and provide support for a KLN89-specific instrument.  It&lt;br /&gt;
// is envisioned that eventually this file and class will be split&lt;br /&gt;
// up between current FG code and new KLN89-specific code and removed.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Distance measuring equipment|DME (Distance Measuring Equipment)]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dme.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/dme.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dme&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;dme&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/dme&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Global Positioning System|GPS (Global Positioning System)]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gps.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gps.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gps&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;gps&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/gps&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GSDI/GSDA (Ground Speed Drift Angle Indicator) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gsdi.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/gsdi.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gsdi&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;gsdi&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/gsdi&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;This instrument configuration is not included in generic-instrumentation.xml. See the [[EC130]] for an aircraft implementing this instrument.&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Directional Gyro|Heading Indicator (Directional Gyro)]] ====&lt;br /&gt;
&lt;br /&gt;
This is a realistic and highly configrable directional gyro based heading indicator. It can be either electrical or&lt;br /&gt;
suction driven and supports the gyro based errors like precession drift and transport wander.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_dg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_dg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Configuration'''&lt;br /&gt;
&lt;br /&gt;
By default, the instrument is electrically driven and powered by '''/systems/electrical/outputs/DG[number]''' (for backwards-compatibility reasons)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Like with most other electrically driven instruments you can explicitely set the power source:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;power-supply&amp;gt;/systems/electrical/outputs/heading-indicator&amp;lt;/power-supply&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-supply-volts&amp;gt;12.0&amp;lt;/minimum-supply-volts&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make it vacuum driven instead:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-dg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-vacuum&amp;gt;4.0&amp;lt;/minimum-vacuum&amp;gt;  &amp;lt;!-- from this inHg suction on the spin will reach 100% --&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-dg&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can optionally configure the instruments error behaviour and limits (to disable, set accordingly).&lt;br /&gt;
The defaults given in c++ are for demonstration and not realistic so these might be better:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;limits&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-limit-rate&amp;gt;11.5&amp;lt;/yaw-limit-rate&amp;gt;       &amp;lt;!-- about 55° bank; +- this yaw rate (deg/s) and the gyro will accumulate errors --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-lower&amp;gt;-0.8&amp;lt;/g-limit-lower&amp;gt;         &amp;lt;!-- exceeding lower G limit makes gyro drag --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-upper&amp;gt;1.8&amp;lt;/g-limit-upper&amp;gt;          &amp;lt;!-- exceeding upper G limit makes gyro drag --&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-error-factor&amp;gt;0.033&amp;lt;/yaw-error-factor&amp;gt;  &amp;lt;!-- how much error out-of-limits yaw-rate (deg/s) will add --&amp;gt;&lt;br /&gt;
      &amp;lt;g-error-factor&amp;gt;0.033&amp;lt;/g-error-factor&amp;gt;      &amp;lt;!-- how much error out-of-limits G-forces will add --&amp;gt;&lt;br /&gt;
      &amp;lt;g-limit-tumble-factor&amp;gt;1.5&amp;lt;/g-limit-tumble-factor&amp;gt; &amp;lt;!-- exceeding g-limit-upper/lower by this factor will make the gyro tumble --&amp;gt;&lt;br /&gt;
      &amp;lt;g-node&amp;gt;/accelerations/pilot-gdamped&amp;lt;/g-node&amp;gt;  &amp;lt;!-- optionally read the g force for the limits from here --&amp;gt;&lt;br /&gt;
      &amp;lt;g-filter-time&amp;gt;10.0&amp;lt;/g-filter-time&amp;gt;         &amp;lt;!-- damping value for internal g node damping. use 0  to disable --&amp;gt;&lt;br /&gt;
      &amp;lt;yaw-rate-source&amp;gt;/orientation/yaw-rate-degps&amp;lt;/yaw-rate-source&amp;gt; &amp;lt;!-- optional read the yaw-rate from here --&amp;gt;&lt;br /&gt;
    &amp;lt;/limits&amp;gt;&lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;minimum-spin-norm&amp;gt;0.8&amp;lt;/minimum-spin-norm&amp;gt;  &amp;lt;!-- min. spin to not let the gyro lag when changing heading --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
    &amp;lt;heading-source&amp;gt;/orientation/heading-deg&amp;lt;/heading-source&amp;gt; &amp;lt;!-- alternate source for the heading value --&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instrument has a built-in damping filter for the g-node, so spikes do not trigger tumbling. If tuning this is not sufficient, you can specify a custom source property.&lt;br /&gt;
&lt;br /&gt;
'''Runtime configuration'''&lt;br /&gt;
The limits and gyro config are exposed to the instruments propoerty tree and can be changed at runtime.&lt;br /&gt;
&lt;br /&gt;
The following proerties are also exposed for runtime configuration:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;caged-flag&amp;lt;/code&amp;gt;&lt;br /&gt;
|Make the gyro caged. Use this to quickly stop tumbling (or prevent it in the first instance).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;align-deg&amp;lt;/code&amp;gt;&lt;br /&gt;
|Should be used by the instruments model to rotate the disc, countering instrument errors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;latitude-nut-setting&amp;lt;/code&amp;gt;&lt;br /&gt;
|Set to the factory setting. At the nut's latitutde (&amp;lt;code&amp;gt;-90&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;) the precession by earths rotation is countered by a small weight on the gimbal.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====[[Avionics and instruments#Directional Gyro|Heading Indicator (Electric Flux-Gate Compass)]]====&lt;br /&gt;
The flux-gate heading indicator always points to magnetic north automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_fg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading_indicator_fg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator-fg&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator-fg&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator-fg&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Powered by '''/systems/electrical/outputs/heading-indicator-fg[number]'''&lt;br /&gt;
&lt;br /&gt;
==== Heading Indicator (Suction-Driven) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading-indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/heading-indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;heading-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;heading-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;suction&amp;gt;/systems/vacuum/suction-inhg&amp;lt;/suction&amp;gt;&lt;br /&gt;
&amp;lt;/heading-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following proerties are also exposed for runtime configuration:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;offset-deg&amp;lt;/code&amp;gt;&lt;br /&gt;
|Read/write; Gyro drift is reflected in this property, and can be countered by altering the value. If not initialized at instrument init time, will be synced to &amp;quot;/environment/magnetic-variation-deg&amp;quot; automatically.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Note, this is an unrealistic/simple instrument. For better realism options, you should use the &amp;quot;Heading Indicator (Directional Gyro)&amp;quot;, see above.&lt;br /&gt;
&lt;br /&gt;
* Suction: see [[Aircraft systems#Vacuum]]&lt;br /&gt;
&lt;br /&gt;
==== King KR 87 Digital ADF (Automatic Direction Finder) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/kr_87.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/kr_87.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;KR-87&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;kr-87&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/KR-87&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Compass|Magnetic Compass]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mag_compass.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mag_compass.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;magnetic-compass&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;magnetic-compass&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
	&amp;lt;!--	Deviation table, matches deviation table texture	--&amp;gt;&lt;br /&gt;
	&amp;lt;deviation&amp;gt;&lt;br /&gt;
		&amp;lt;table&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;0&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;1&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;30&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;3&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
                        &amp;lt;!-- ... --&amp;gt;&lt;br /&gt;
			&amp;lt;entry&amp;gt;&lt;br /&gt;
				&amp;lt;ind&amp;gt;330&amp;lt;/ind&amp;gt;&lt;br /&gt;
				&amp;lt;dep&amp;gt;-2&amp;lt;/dep&amp;gt;&lt;br /&gt;
			&amp;lt;/entry&amp;gt;&lt;br /&gt;
		&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;/deviation&amp;gt;&lt;br /&gt;
&amp;lt;/magnetic-compass&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Deviation Table: This can be used to simulate [[Avionics and instruments#Magnetic deviation|Magnetic deviation]], e.g. to reflect what's written on a textured deviation card next to the compass. Can also be a property that is beeing read and dynamically calculated (&amp;lt;code&amp;gt;&amp;lt;deviation&amp;gt;/instrumentation/magnetic-compass/deviation-deg&amp;lt;/deviation&amp;gt;&amp;lt;/code&amp;gt;), for example to implement powered avionics influencing the magnetic field.&lt;br /&gt;
&lt;br /&gt;
By default the compass simulates a fixed axis compass disc pitched at 0°. A pitched compass disc has an additional reading error.&lt;br /&gt;
The compass property tree exposes a &amp;lt;code&amp;gt;/instrumentation/magnetic-compass/pitch-offset-deg&amp;lt;/code&amp;gt; prop that can be set to a fixed pitch angle to simulate pitched mounts or manually pitchable compass casings. By dynamically calculating the property, you can offset the plane's &amp;lt;code&amp;gt;/orientation-pitch-deg&amp;lt;/code&amp;gt;, essentially nulling the effect. By adding some filters you can simulate a freely pitchable compass disc for a constrained pitch angle; that is: a compass disc mounted on a pivot-pin bearing (like most modern compasses feature). For an example see the [https://github.com/c172p-team/c172p/blob/a8bc43674af51cfe093c03ae21e2e84467b456fb/Systems/instruments.xml#L599-L802 filter implementation from the C172p].&lt;br /&gt;
&lt;br /&gt;
==== [[Radio beacons#Marker beacons|Marker Beacon]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/marker_beacon.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/marker_beacon.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;marker-beacon&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;marker-beacon&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/marker-beacon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Ground proximity warning system|MK-VIII]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mk_viii.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mk_viii.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;mk-viii&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;mk-viii&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/mk-viii&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For more information, see [[Ground proximity warning system]].&lt;br /&gt;
&lt;br /&gt;
==== Master Reference Gyro ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mrg.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/mrg.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;master-reference-gyro&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;master-reference-gyro&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/master-reference-gyro&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;for more information, see [https://scottbouch.com/mcfs/lightningt5t55/docs/ap101b-1003-5-6-15a-part1-chap7-al2-nov84-instruments.pdf Lightning T Mk.5 Instruments PDF, p. 4f.]&lt;br /&gt;
&lt;br /&gt;
==== Navigation Radio ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/navradio.cxx}},{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/newnavradio.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/navradio.hxx}},{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/newnavradio.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nav-radio&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;nav&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/nav-radio&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Radar Altimeter ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/rad_alt.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/rad_alt.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;radar-altimeter&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;radar-altimeter&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;update-interval-sec&amp;gt;0.1&amp;lt;/update-interval-sec&amp;gt;&lt;br /&gt;
&amp;lt;/radar-altimeter&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Turn Coordinator|Slip/Skid Ball]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/slip_skid_ball.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/slip_skid_ball.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;slip-skid-ball&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;slip-skid-ball&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/slip-skid-ball&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Tactical Air Navigation|TACAN]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tacan.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tacan.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tacan&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;tacan&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
&amp;lt;/tacan&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== [[Traffic alert and collision avoidance system|TCAS]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tcas.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/tcas.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
For '''configuration''', see [[Traffic alert and collision avoidance system#Instrument List]]&lt;br /&gt;
&lt;br /&gt;
==== [[Transponder]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/transponder.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/transponder.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;transponder&amp;gt;&lt;br /&gt;
    &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;transponder&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number type=&amp;quot;int&amp;quot;&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;minimum-supply-volts type=&amp;quot;double&amp;quot;&amp;gt;8.0&amp;lt;/minimum-supply-volts&amp;gt;&lt;br /&gt;
    &amp;lt;mode type=&amp;quot;int&amp;quot;&amp;gt;1&amp;lt;/mode&amp;gt;&lt;br /&gt;
    &amp;lt;auto-ground type=&amp;quot;string&amp;quot;&amp;gt;/gear/gear/wow&amp;lt;/auto-ground&amp;gt;&lt;br /&gt;
    &amp;lt;encoder-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/altimeter&amp;lt;/encoder-path&amp;gt;&lt;br /&gt;
    &amp;lt;airspeed-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/airspeed-indicator/indicated-speed-kt&amp;lt;/airspeed-path&amp;gt;&lt;br /&gt;
    &amp;lt;mach-path type=&amp;quot;string&amp;quot;&amp;gt;/instrumentation/airspeed-indicator/indicated-mach&amp;lt;/mach-path&amp;gt;&lt;br /&gt;
    &amp;lt;kt70-compatibility type=&amp;quot;bool&amp;quot;&amp;gt;0&amp;lt;/kt70-compatibility&amp;gt;&lt;br /&gt;
&amp;lt;/transponder&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Mode&lt;br /&gt;
** 0 = Mode A&lt;br /&gt;
** 1 = Mode C&lt;br /&gt;
** 2 = Mode S&lt;br /&gt;
* Auto-Ground: Set property to be used to detect when the ground-bit (mode-S only) should be set&lt;br /&gt;
* Encoder/Airspeed/Mach Path: Set instrument properties to feed the transponder&lt;br /&gt;
* '''for more information, see [[Transponder]].'''&lt;br /&gt;
&lt;br /&gt;
==== [[Avionics and instruments#Turn Coordinator|Turn Indicator]] ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/turn_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/turn_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/AbstractInstrument.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;turn-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;turn-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;gyro&amp;gt;&lt;br /&gt;
      &amp;lt;spin-up-sec&amp;gt;180.0&amp;lt;/spin-up-sec&amp;gt;     &amp;lt;!-- ~3 minutes --&amp;gt;&lt;br /&gt;
      &amp;lt;spin-down-sec&amp;gt;300.0&amp;lt;/spin-down-sec&amp;gt; &amp;lt;!-- ~5 minutes --&amp;gt;&lt;br /&gt;
    &amp;lt;/gyro&amp;gt;&lt;br /&gt;
&amp;lt;/turn-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note, the &amp;lt;code&amp;gt;&amp;lt;gyro&amp;gt;&amp;lt;/code&amp;gt; sections are optional. The defaults given in c++ are for demonstration and not realistic.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Speed Indicator (VSI) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Source File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/vertical_speed_indicator.cxx}}&lt;br /&gt;
|-&lt;br /&gt;
|Header File&lt;br /&gt;
|{{Repo link|site=sf|repo=flightgear|path=src/Instrumentation/vertical_speed_indicator.hxx}}&lt;br /&gt;
|-&lt;br /&gt;
|extends&lt;br /&gt;
|{{Repo link|site=sf|repo=simgear|path=simgear/structure/subsystem_mgr.hxx}}&lt;br /&gt;
|}&lt;br /&gt;
'''Configuration'''&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;vertical-speed-indicator&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;vertical-speed-indicator&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;number&amp;gt;0&amp;lt;/number&amp;gt;&lt;br /&gt;
    &amp;lt;static-pressure&amp;gt;/systems/static/pressure-inhg&amp;lt;/static-pressure&amp;gt;&lt;br /&gt;
&amp;lt;/vertical-speed-indicator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Static Pressure: see [[FGproperties/Systems/static]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Nasal_library/string&amp;diff=140210</id>
		<title>Nasal library/string</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Nasal_library/string&amp;diff=140210"/>
		<updated>2024-08-06T07:03:52Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* string.squeeze(s,length) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Nasal Navigation}}&lt;br /&gt;
== String Handling ==&lt;br /&gt;
This page contains description of functions available in &amp;quot;$FG_ROOT\data\Nasal\strings.nas&amp;quot;.&lt;br /&gt;
For string related functions in Nasal also see [[Nasal_library|Nasal library]] page.&lt;br /&gt;
UTF8 specific functions are from Nasal core library.&lt;br /&gt;
&lt;br /&gt;
== One Character Functions ==&lt;br /&gt;
=== string.isalnum() === &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isalnum();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isalpha() === &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isalpha();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isascii() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isascii();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isblank() === &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isblank();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.iscntrl() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.iscntrl();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isdigit() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isdigit();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isgraph() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isgraph();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.islower() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.islower();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isprint() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isprint();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.ispunct() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.ispunct();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isspace() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isspace();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isupper() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isupper();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isxdigit() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isxdigit();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isxspace() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isxspace();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.toupper() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.toupper();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.tolower() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.tolower();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== String Functions ==&lt;br /&gt;
=== string.icmp(a,b) ===&lt;br /&gt;
Case insensitive string compare function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.icmp(a,b);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.imatch(a,b) ===&lt;br /&gt;
Case insensitive match function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.imatch(a,b);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
*string.imatch(&amp;quot;alpha&amp;quot;,&amp;quot;beta&amp;quot;) -&amp;gt; 0&lt;br /&gt;
*string.imatch(&amp;quot;alpha&amp;quot;,&amp;quot;alpha&amp;quot;) -&amp;gt; 1&lt;br /&gt;
*string.imatch(&amp;quot;&amp;quot;,&amp;quot;alpha&amp;quot;) -&amp;gt; 0&lt;br /&gt;
*string.imatch(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;) -&amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
=== string.join(sep,list) ===&lt;br /&gt;
Join all elements of a list inserting a separator between every two of them. See [[Nasal_library#split()|split()]].&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.join(sep,list);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.lc(str) ===&lt;br /&gt;
Return string converted to lower case letters.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.lc(str);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.match(str, patt) ===&lt;br /&gt;
Check if string &amp;lt;str&amp;gt; matches shell style pattern &amp;lt;patt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# Rules:&lt;br /&gt;
# ?   stands for any single character&lt;br /&gt;
# *   stands for any number (including zero) of arbitrary characters&lt;br /&gt;
# \   escapes the next character and makes it stand for itself; that is:&lt;br /&gt;
#     \? stands for a question mark (not the &amp;quot;any single character&amp;quot; placeholder)&lt;br /&gt;
# []  stands for a group of characters:&lt;br /&gt;
#     [abc]      stands for letters a, b or c&lt;br /&gt;
#     [^abc]     stands for any character but a, b, and c  (^ as first character -&amp;gt; inversion)&lt;br /&gt;
#     [1-4]      stands for digits 1 to 4 (1, 2, 3, 4)&lt;br /&gt;
#     [1-4-]     stands for digits 1 to 4, and the minus&lt;br /&gt;
#     [-1-4]     same as above&lt;br /&gt;
#     [1-3-6]    stands for digits 1 to 3, minus, and 6&lt;br /&gt;
#     [1-3-6-9]  stands for digits 1 to 3, minus, and 6 to 9&lt;br /&gt;
#     [][]       stands for the closing and the opening bracket (']' must be first!)&lt;br /&gt;
#     [^^]       stands for all characters but the caret symbol&lt;br /&gt;
#     [\/]       stands for a backslash or a slash  (the backslash isn't an&lt;br /&gt;
#                escape character in a [] character group)&lt;br /&gt;
#&lt;br /&gt;
#     Note that a minus can't be a range delimiter, as in [a--e],&lt;br /&gt;
#     which would be interpreted as any of a, e, or minus.&lt;br /&gt;
#&lt;br /&gt;
# Example:&lt;br /&gt;
&lt;br /&gt;
string.match(name, &amp;quot;*[0-9].xml&amp;quot;); ... true if 'name' ends with digit followed by &amp;quot;.xml&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.normpath(path) ===&lt;br /&gt;
Removes superfluous slashes, empty and &amp;quot;.&amp;quot; elements,&lt;br /&gt;
expands all &amp;quot;..&amp;quot; elements keeping relative paths,&lt;br /&gt;
and turns all backslashes into slashes.&lt;br /&gt;
The result will start with a slash if it started with a slash or backslash, it will end without slash.                                                 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.normpath(path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
See also [[Nasal_library#resolvepath|resolvepath()]] function, which can be used to test if a file exists.&lt;br /&gt;
&lt;br /&gt;
=== string.replace(str,old,new) ===&lt;br /&gt;
Replace all occurrences of 'old' by 'new'.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.replace(str,old,new);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.scanf(test,format,result) ===&lt;br /&gt;
Simple scanf function. Takes an input string, a pattern, and a vector. &lt;br /&gt;
It returns 0 if the format didn't match, and appends all found elements to the given vector. &lt;br /&gt;
&lt;br /&gt;
Return values:                                                                                &lt;br /&gt;
 -1 string matched format ending with % (i.e. more chars than format cared about)&lt;br /&gt;
  0 string didn't match format                                                   &lt;br /&gt;
  1 string matched, but would still match if the right chars were added          &lt;br /&gt;
  2 string matched, and would not if any character would be added                &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var r = string.scanf(&amp;quot;comm3freq123.456&amp;quot;, &amp;quot;comm%ufreq%f&amp;quot;, var result = []);    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The result vector will be set to [3, 123.456].&lt;br /&gt;
&lt;br /&gt;
=== string.squeeze(s,length) ===&lt;br /&gt;
Shorten string s to length by replacing characters in the middle by '...'.&lt;br /&gt;
(since 2020.4 / next as of 03.08.2024)  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var r = string.squeeze(&amp;quot;FooBarBaz&amp;quot;, 9);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
r now contains the string &amp;quot;Foo...Baz&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== string.trim(str,lr[,func]) === &lt;br /&gt;
Trim spaces at the left (lr &amp;lt; 0), at the right (lr &amp;gt; 0), or both (lr = 0) is default.&lt;br /&gt;
An optional function argument defines which characters should be trimmed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.trim(a);                                    # trim spaces             &lt;br /&gt;
string.trim(a, 1, string.isdigit);                 # trim digits at the right&lt;br /&gt;
string.trim(a, 0, func(c) c == `\\` or c == `/`);  # trim slashes/backslashes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.uc(str) ===&lt;br /&gt;
Return string converted to upper case letters.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.uc(str);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.compileTemplate(template,type=nil) ===&lt;br /&gt;
Get a function out of a string template for fast insertion of template parameters. &lt;br /&gt;
This allows to use the same templates as with most available tile mapping engines (eg. Leaflet, Polymaps). &lt;br /&gt;
Return a callable function object on success, and nil if parsing the templated fails.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.compileTemplate(template);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Example (Build MapQuest tile url):                                &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
 var makeUrl = string.compileTemplate(                          &lt;br /&gt;
   &amp;quot;http://otile1.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg&amp;quot;    &lt;br /&gt;
 );                                                             &lt;br /&gt;
 print( makeUrl({x: 5, y: 4, z: 3}) );                          &lt;br /&gt;
&lt;br /&gt;
Output:   http://otile1.mqcdn.com/tiles/1.0.0/map/3/5/4.jpg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UTF8 String Functions (Core) ==&lt;br /&gt;
=== utf8.chstr(unicode) ===&lt;br /&gt;
Returns a string containing the UTF8 representation of the specified unicode character value. &lt;br /&gt;
=== utf8.strc(string, index) ===&lt;br /&gt;
Returns the unicode character at the specified index within the UTF8 string. Dies on encoding error or overrun. &lt;br /&gt;
=== utf8.substr(string, start, len=nil) ===&lt;br /&gt;
As for regular substr(), but the indices are of UTF8 characters intead of bytes. Dies on encoding error or overflow. &lt;br /&gt;
=== utf8.size(string) ===&lt;br /&gt;
As for regular size() when called on a string, but returns the number of UTF8 unicode characters instead of bytes. Dies on encoding error. &lt;br /&gt;
=== utf8.validate(string, replace=`?`) ===&lt;br /&gt;
Checks the string for UTF8 validity. At every byte position where an encoding error is found, it replaces that byte with the specified replacement character (default is `?`). Note that the second argument is a number, not a string.&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Swift&amp;diff=140185</id>
		<title>Swift</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Swift&amp;diff=140185"/>
		<updated>2024-08-05T07:45:00Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Aircraft mapping (swift mapping tool) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox subsystem&lt;br /&gt;
|image       = FG swift connection.PNG&lt;br /&gt;
|name        = swift-connection module&lt;br /&gt;
|started     = 10/2018&lt;br /&gt;
|description = Connection module to swift pilot client which allows connections to FSD servers like VATSIM&lt;br /&gt;
|status      = Released (FG 2020.1) and actively developed&lt;br /&gt;
|maintainers = Lars Toenning&lt;br /&gt;
|developers  = Lars Toenning&lt;br /&gt;
|folders = {{flightgear source | path = src/Network/Swift/ }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This module allows [[FlightGear]] to connect to an externally running '''''swift''''' client.&lt;br /&gt;
&lt;br /&gt;
''swift'' is an open-source pilot client for multiple flight simulators (FSX, P3D, FS9, XPlane, FG) and operating systems (Windows, MacOS, Linux). It allows connections to FSD servers like VATSIM. Further information about ''swift'' can be [https://datastore.swift-project.org/page/about.php found here].&lt;br /&gt;
&lt;br /&gt;
== swift project status ==&lt;br /&gt;
''swift'' is actively developed [https://dev.swift-project.org/ here] and is in public beta status.&lt;br /&gt;
&lt;br /&gt;
== Current features ==&lt;br /&gt;
The key features include:&lt;br /&gt;
&lt;br /&gt;
* aircraft interpolation&lt;br /&gt;
* voice communication with ATC, support for new VATSIM codec planned&lt;br /&gt;
* model matching&lt;br /&gt;
* Database support for model mappings, users can contribute&lt;br /&gt;
* [[TCAS]] support &lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''FlightGear 2019.1.2 and earlier isn't compatible with swift &amp;gt;= 0.11.0.'''&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For communication between FlightGear and swift dbus is used. To assure that both sides using the same commands for communication the FGSWIFTBUS_API_VERSION must match each other. Otherwise connection is not possible.&lt;br /&gt;
&lt;br /&gt;
For compatibility see the following table:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; border: none; background: none;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!{{diagonal split header|swift|FlightGear}}&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &amp;lt;2019.2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| next&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &amp;lt;=0.9.3&lt;br /&gt;
| style=&amp;quot;background-color:#ff0000;&amp;quot;| -/-&lt;br /&gt;
| style=&amp;quot;background-color:#00ff00;&amp;quot;| -/-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| develop&lt;br /&gt;
| style=&amp;quot;background-color:#ff0000;&amp;quot;| 1/-&lt;br /&gt;
| style=&amp;quot;background-color:#ff0000;&amp;quot;| 1/-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Install/Setup ==&lt;br /&gt;
For an setup guide for FG see: https://swift-project.org/home/install/configure_fg/&lt;br /&gt;
&lt;br /&gt;
Alot of good videos for the swift gui are on youtube: https://www.youtube.com/playlist?list=PLREsotdYQdGmeasv1x8vsNhiZGhankLoP&lt;br /&gt;
&lt;br /&gt;
=== Linux specifics ===&lt;br /&gt;
&lt;br /&gt;
==== Hotkeys support ====&lt;br /&gt;
https://swift-project.org/troubleshooting/linux_hotkeys/&lt;br /&gt;
&lt;br /&gt;
On Linux, the swift client needs read access to the device nodes &amp;lt;code&amp;gt;/dev/input/event*&amp;lt;/code&amp;gt;. In case your linux user does not have read access to this nodes, the swift client cannot grab keyboard events, and thus the PTT assigned keybind will not work.&lt;br /&gt;
&lt;br /&gt;
To fix, for example in Debian 12, you just need to add a udev rule from the link above and reboot.&lt;br /&gt;
&lt;br /&gt;
== Aircraft mapping (swift mapping tool) ==&lt;br /&gt;
For correct aircraft loading and parsing into swift you need to add FG's model directories.&lt;br /&gt;
The supported folders are:&lt;br /&gt;
* &amp;lt;tt&amp;gt;[[$FG_ROOT]]/AI/Aircraft&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Any other folder which contains user-flyable airplanes (in separate folders, one per plane). Note, that you need to add the folder containing the actual .ac/xml model, not the one with the -set.xml, as the latter won't work.&lt;br /&gt;
&lt;br /&gt;
=== Note for Windows users ===&lt;br /&gt;
Starting with swift 0.9.1, swift automatically adds the sim and model paths if FlightGear was installed through the installer.&lt;br /&gt;
&lt;br /&gt;
== WIP video ==&lt;br /&gt;
{{#ev:youtube|l5O3tRobYPY}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139887</id>
		<title>Suggested Flights</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139887"/>
		<updated>2024-05-29T09:10:39Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Australia and Oceania */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;!-- if you add new flights to this page it would be cool to include your name and month of writing. Also include the newsletter month and year if the flight has been published in one. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ------------------------------------------------- --&amp;gt;&lt;br /&gt;
[[FlightGear]] has accurate and realistic terrain. Here are some interesting places where you can do virtual sight seeing.&lt;br /&gt;
&lt;br /&gt;
If you are starting with [[FGRun]] - the FlightGear launcher - you can enter the [[airport]] id and select the runway on the appropriate screen in the startup wizard.&lt;br /&gt;
If you are starting from the command line you can use the options: &amp;lt;tt&amp;gt;--airport=ABCD&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;--runway=12L&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Remember to give a look at the [[Suggested Airports]] page, where you can find a comprehensive list of high quality airports in FlightGear.&lt;br /&gt;
*If you enjoy these flights, please consider recording a flight and posting a link to it at the [[Suggested Prerecorded Flights]] page.&lt;br /&gt;
&lt;br /&gt;
'''Remove before flight!''' &amp;lt;!-- No comprendo? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before you start flying into one of the suggested flights, you should add both the terrain and the Objects to you FlightGear installation; This is well explained on the [[Howto: Install scenery|installing scenery]] page.&lt;br /&gt;
&lt;br /&gt;
p.s. charts are generated using FlightGear data only.&lt;br /&gt;
&lt;br /&gt;
This page includes the flights described on the [http://www.flightgear.org/places.html main website] and the suggested flights from the newsletters. It can serve as an archive for suggested flights from future [[FlightGear Newsletter|newsletters]] or can give a flight if creativity is low that month. &lt;br /&gt;
&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
&lt;br /&gt;
=Cross Continentals or World Tour=&lt;br /&gt;
&lt;br /&gt;
* [[Breitling DC-3 World Tour]][[File:Rect17.png|thumbnail]]&lt;br /&gt;
* [[Flying the Hump]]&lt;br /&gt;
&lt;br /&gt;
=North America=&lt;br /&gt;
==Round Valley Airport==&lt;br /&gt;
[[Image:O09-002.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:O09-003.png|thumb|right|Valley]]&lt;br /&gt;
Covalis, CA. The airport is at the West edge of a 7 mile across valley.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The predominant wind is a cross wind. Take-offs to the west (if they use the full runway length) often have to fly between 2 small hills and over another valley while gaining altitude. Most pilots take off to the west.&amp;lt;BR/&amp;gt;&lt;br /&gt;
It is a paved runway and quite long. It was designated as an emergency recovery field during the Cold War and was used twice that I know of by military aircraft that could not take off again from the field. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
{{Location map | USA&lt;br /&gt;
| caption = Latitude: 39.790156 Longitude: -123.266403&lt;br /&gt;
| lat_deg = 39.790156&lt;br /&gt;
| lon_deg = -123.266403&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* [[O09|O09 - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/O09.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
I have tried this trip using a p38, quite powerful airplane&lt;br /&gt;
* [[Lockheed-P38|P38]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=O09 --runway=28 --aircraft=p38&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Half Moon Bay==&lt;br /&gt;
[[Image:KHAF-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:KHAF-002.png|thumb|right|Bridge]]&lt;br /&gt;
Start at [[KHAF|Half Moon Bay]], Runway 30, with 32km visibility; Takeoff in the C172 and climb to 1000 feet, then continue north over the water, near the shoreline. Look out the right window frequently. Fly up the coast, overfly the Golden Gate Bridge, continue around the top of the peninsula past downtown SF, then fly on to [[KSFO]] for a landing. We now have lots to see.&lt;br /&gt;
&lt;br /&gt;
If you cannot see the runway in the default 172, you must be flying too high or too slowly. You can start by practicing a bit with a good setup:&lt;br /&gt;
&lt;br /&gt;
'''fgfs --offset-distance=1.5 --altitude=500 --vc=70'''&lt;br /&gt;
&lt;br /&gt;
As soon as FlightGear starts, cut the power to 1500 rpm and drop two notches of flap. Maintain 70 kt. Now, pick your landing spot (a bit down the runway) and try to hold it in the same spot on your windshield. If your landing spot starts moving down, you are too high, and should cut another 100 rpm; if it starts moving up, you are too low, and should add another 100 rpm. Adjust the nose to keep your speed at 70 kt all the way down until you're right above the numbers, then cut power to idle, drop the last notch of flaps, flare, and land.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KHAF-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:World-KHAF.png|thumb|right|Latitude: 37.513333 Longitude: -122.501111]]&lt;br /&gt;
* [[KHAF|KHAF - Half Moon Bay]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KHAF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
no required scenery tile.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSFO-001.png|thumb|left|Before landing]]&lt;br /&gt;
Use the default c172 airplane &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KHAF --runway=30 --visibility=32000 --aircraft=c172&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
April 2006 [[User:Hellosimon|Hellosimon]], format and extended by [[User:Francescobrisa|Francescobrisa]]&lt;br /&gt;
&lt;br /&gt;
==Hell's Canyon==&lt;br /&gt;
[[Image:25U-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:25U-004.png|thumb|right|Valley]]&lt;br /&gt;
Hell's Canyon, Imnaha, OR. This airport is located just west of &amp;quot;Hell's Canyon National Park&amp;quot; which has the Snake River running through it.&amp;lt;br/&amp;gt;&lt;br /&gt;
Supposedly it's a 5500 foot drop from the top of the canyon to the river.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The airport is located on the brink of this canyon.&lt;br /&gt;
&lt;br /&gt;
See the remarks on the airport page (click on the airport id) ... DOWNDRAFTS, SHEER DROP IN TERRAIN, LIVESTOCK, etc. Don't go here on your first solo x-country. :-) &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:25U-005.png|thumb|left|Landing]]&lt;br /&gt;
[[Image:World-25U.png|thumb|right|Latitude: 45.427861 Longitude: -116.693889]]&lt;br /&gt;
* [[25U|25U - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/25U.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:25U-006.png|thumb|left|Landing 2]]&lt;br /&gt;
I have tried this trip using a pilatus PC-9M, powerful airplane&lt;br /&gt;
* [[PC-9M|PC-9M]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=25U --aircraft=PC-9M&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crater Lake National Park Tour==&lt;br /&gt;
[[Image:64s-003.png|thumb|left|Approaching the lake]]&lt;br /&gt;
[[Image:64s-002.png|thumb|right|Direction 40 degrees]]&lt;br /&gt;
Prospect, OR.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take off and fly at a heading of about 40 degrees until you cross the first distinct ridge in front of you. (several minutes of flight in the navion ... just climb as fast as you can, it will be a close squeek to get over :-)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you clear the ridge and can see beyond it, turn right and fly a heading of about 70 degrees. You should see two shallow peaks off in the distance. Head right between these -- they are the two sides of the crater. As you get closer the shape of the crater will come into view. There's a lake there in real life, hopefully it will be there in flight gear too before long.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:64s-001.png|thumb|left|Leaving the 64S airfield]]&lt;br /&gt;
[[Image:World-64S.png|thumb|right|Latitude: 42.743183 Longitude: -122.488092]]&lt;br /&gt;
* [[64S|64S - Prospect State]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/64S.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:64s-004.png|thumb|left|Lake view 1]]&lt;br /&gt;
[[Image:64s-005.png|thumb|right|Lake view 2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ryan_Navion|Navion]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=64S --runway=02 --aircraft=navion &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Grand Canyon Tour==&lt;br /&gt;
[[Image:Grand_Canyon_Tour_4.jpg|700px|frameless|center]]&lt;br /&gt;
Being a special place, there are also special flight rules for VFR traffic around the Grand Canyon. There are multiple no-fly-zones set up and VFR traffic is only allowed to fly via the designated corridors. If you want to fly realistically, avoid these zones in FlightGear as well, following for example the [https://skyvector.com/?ll=36.18649251415492,-112.52223157994264&amp;amp;chart=230&amp;amp;zoom=5&amp;amp;fpl=%20KGCN%20VPGCF%20VPGCG%20VPGCD%20VPGCC%20VPGCA%203608N11252W%203609N11309W%201Z1%201G4%203AZ5 route shown here. (skyvector link)]&lt;br /&gt;
&lt;br /&gt;
This flight takes you from KGCN, the Grand Canyon National Park airport, to 3AZ5, a small airfield called Hualapai located south of the Grand Canyon. Departing from KGCN, fly north-west bound to reach the canyon. From there, either follow the route shown on skyvector above, or fly visually through the canyon westbound towards 1Z1, Grand Canyon Bar Ten Airstrip. From there on, continue flying westward to 1G4. Called Grand Canyon West, 1G4 also marks about the western end of the canyon. To get to your destination 3AZ5, continue along the southern rim, flying eastward now. Shortly after leaving the breathtaking valley behind you, you will already reach your destination. Land and let your engine and your mind cool down from the special views :)&lt;br /&gt;
&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Grand_Canyon_Tour_2.jpg&lt;br /&gt;
Grand_Canyon_Tour_3.jpg&lt;br /&gt;
Grand_Canyon_Tour_1.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports===&lt;br /&gt;
* KGCN - Grand Canyon National Park Airport - [https://www.aopa.org/destinations/airports/KGCN/details aopa.org]&lt;br /&gt;
* 1Z1 - Grand Canyon Bar Ten Airstrip - [https://www.airnav.com/airport/1Z1 airnav.com]&lt;br /&gt;
* 1G4 - Grand Canyon West - [https://www.airnav.com/airport/1G4 airnav.com]&lt;br /&gt;
* 3AZ5 - Hualapai - [https://www.airnav.com/airport/3AZ5 airnav.com]&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
Most VFR aircraft with sufficiently big windows will serve the purpose, for example:&lt;br /&gt;
*[[Cessna C172P]]&lt;br /&gt;
*[[Optica]]&lt;br /&gt;
*[[Ryan_Navion]]&lt;br /&gt;
If you are more interested in flying helicopters, the [[Eurocopter EC130 B4]] with the Grand Canyon Helicopters livery might be for you.&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
*[https://www.nps.gov/grca/learn/nature/upload/sfra.pdf Chart of the Grand Canyon special airspace, published by the National Park Service]&lt;br /&gt;
*[http://www.swaviator.com/html/issueJJ99/canyon.html An article about flying close to the Grand Canyon]&lt;br /&gt;
*[https://www.aopa.org/news-and-media/all-news/2017/april/flight-training-magazine/road-trip-grand-canyon AOPA Flight suggestion]&lt;br /&gt;
&lt;br /&gt;
==Ranger Creek Airport==&lt;br /&gt;
[[File:21w-1.jpg|500px|center|Waiting for departure at Ranger Creek]]&lt;br /&gt;
Ranger Creek Airport is located in Greenwater, Washington, USA. Being wedged into the bottom of a steep canyon, you'll definitely need to be on your toes to get in and out of there. Switch on Advanced Weather and Live Data to experience what the winds can do to you in real life!&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
* [[21W|21W - Ranger Creek]] - [http://www.airnav.com/airport/21W airnav.com]&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Ranger_Creek1.jpg|Departing between the mountains&lt;br /&gt;
Ranger_Creek_2.jpg|Looking back towards the airfield&lt;br /&gt;
Ranger_Creek_3.jpg|Downwind for approach back to Ranger Creek&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
For this flight, the Piper PA-18 SuperCub is suggested, this is included in the [[Piper J3 Cub]] package&lt;br /&gt;
&lt;br /&gt;
==Mount Rainier Tour==&lt;br /&gt;
[[Image:WA20-002.png|thumb|left|The mountain from far away]]&lt;br /&gt;
[[Image:WA20-006.png|thumb|right|external view]]&lt;br /&gt;
Eatonville, WA. Start out at Swanson Airport in Eatonville, WA. Take off and fly a heading of about 90 degrees. You will need to fly for 5-10 minutes before the mountain comes into view. Be patient if you don't see it right away, it will dwarf everything in it's vicinity. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-WA20.png|thumb|right|Latitude: 46.87588502 Longitude: -122.25733500]]&lt;br /&gt;
&lt;br /&gt;
* [[WA20|WA20 - Swanson]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/WA20.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:WA20-007.png|thumb|left|external near view]] &lt;br /&gt;
[[Image:WA20-009.png|thumb|right|external near view]] &lt;br /&gt;
* [[mosquito]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=WA20 --aircraft=mosquito&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Death Valley Tour==&lt;br /&gt;
[[Image:L06-001.png|thumb|left|in the air]]&lt;br /&gt;
[[Image:Furnace-creek.jpg|thumb|left|real life view of Furnace Creek Airfield]]&lt;br /&gt;
[[Image:L06-002.png|thumb|right|in the air]] &lt;br /&gt;
Furnace Creek, CA. This starts you right in the middle of Death Valley which runs north &amp;amp; south. If you head south about 15 miles you'll hit the lowest point in the USA, 282 feet (86 meters) below sea level.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-L06.png|thumb|right|Latitude: 36.46451100 Longitude: -116.88139422]]&lt;br /&gt;
* [[L06|L06 - Furnace Creek]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/L06.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:L06-003.png|thumb|left|in the air]] &lt;br /&gt;
[[Image:L06-004.png|thumb|right|in the air]] &lt;br /&gt;
* [[rallye-MS893]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=L06 --aircraft=rallye-MS893&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utah==&lt;br /&gt;
!!! Work in progress !!!&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Image:6WA8-002.png|thumb|left|landing 1]]&lt;br /&gt;
[[Image:6WA8-008.png|thumb|right|landing 2]] &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Escalante Muni Airport, Escalante, UT. This airport is east and a bit north of Bryce Canyon National park. If you head mostly south and a bit east you'll eventually hit the Grand Canyon. It is sandwiched between the Dixie National forest to the north and the Grand Staircase-Escalante National Monument to the south. There should be interesting stuff to see no matter which direction you head.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-1L7.png|thumb|right|Latitude: 37.75054400 Longitude: -111.57578300]]&lt;br /&gt;
* [[1L7|1L7 - Escalante Muni]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/1L7.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
	[[Image:6WA8-009.png|thumb|left|landing 3]] &lt;br /&gt;
* [[Piper PA-18 Super Cub|pa 18]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=1L7 --aircraft=pa18&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lake County Airport (CO)==&lt;br /&gt;
[[Image:KLXV-001.png|thumb|left|Adjust mixture !]]&lt;br /&gt;
[[Image:KLXV-002.png|thumb|right|The terrain will be covered by snow]] &lt;br /&gt;
Lake County Airport, Leadville, CO. This airport is at an elevation of 9927 making it a bit of a challenge to get into and out of with a standard C172.&amp;lt;BR/&amp;gt;&lt;br /&gt;
Make sure you lean out your engine before taking off and read up on density altitude before you try this one in real life. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KLXV-003.png|thumb|left|The airport]]&lt;br /&gt;
[[Image:World-KLXV.png|thumb|right|Latitude: 39.22812500 Longitude: -106.31835600]]&lt;br /&gt;
* [[KLXV|KLXV - Lake Co]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KLXV.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w110n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KLXV-004.png|thumb|left|I like this panorama]] &lt;br /&gt;
[[Image:KLXV-005.png|thumb|right|The nearby lake]] &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
[[Image:KLXV-006.png|thumb|left|Landing...]] &lt;br /&gt;
 fgfs --airport=KLXV --aircraft=c172p&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caribbean - Saint Martin and St. Kitts== &lt;br /&gt;
[[Image:TNCM-003.png|thumb|left|just after the take off]]&lt;br /&gt;
[[Image:TNCM-004.png|thumb|right|some nearby island]] &lt;br /&gt;
Pilots of the Caribbeans is an informal FlightGear community of users who fly around the small Caribbean islands, many of which have custom scenery and improved landclass data. (For details see [[Pilots of the Caribbean]])&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[TNCM|Princess Juliana International Airport (TNCM)]] at the isle of Saint Martin, is one of the most popular airports in FlightGear. In large part due to the custom objects and land cover. However, St. Marten is only one of several detailed airports in the region - and, while the approach for TNCM is one of the most memorable in the whole world, the land cover for St. Kitts and Nevis makes it a lovely place to fly.&lt;br /&gt;
&lt;br /&gt;
British Airways, US Airways and American Airlines, among others, all fly into St. Kitts' [[TKPK|Robert L. Bradshaw International Airport (TKPK)]] in real life.&lt;br /&gt;
&lt;br /&gt;
Take off from TKPK in a [[Piper_J3_Cub|Piper Cub]] and make a northward, clockwise circle of the island. Start your descent on the east side of the island, and focus on the small hill which separates the north from the south. Start hugging the coast near the beach and look to the west - as soon as the railroad heads to the southwest, you're about ready to turn for final. Make your right hand turn for final and taxi to the terminal.&lt;br /&gt;
&lt;br /&gt;
If you want to fully explore this whole country, take off in a Beaver, which has a little more speed, and fly a figure eight. Take off from TKPK and circle the airport to the north like in the Cub. Then instead of landing, perform a touch-and-go and turn left over the boat terminal and make for the west coast of Nevis. Enjoy the beauty of the south coast of St. Kitts before circling Nevis. Over Nevis, you have several options - cut your flight short and land at [[TKPN]] on the island of Nevis, complete the &amp;quot;figure eight&amp;quot; by heading back to TKPK, or check your fuel and head east across the Caribbean to Antigua (which does not have custom land cover).&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
Check out the [[Pilots of the Caribbean]] page, for further informations.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-TNCM.png|thumb|right|Latitude: 18.040953 Longitude: -63.108900]]&lt;br /&gt;
&lt;br /&gt;
* [[TNCM|TNCM - Princess Juliana International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TNCM.pdf chart] &lt;br /&gt;
* [[TKPK|TKPK - Robert L. Bradshaw International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPK.pdf chart] &lt;br /&gt;
* [[TKPN|TKPN - Vance Winkworth Amory Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPN.pdf chart] &lt;br /&gt;
others interesting airports in the area:&lt;br /&gt;
* [[TFFF|TFFF - Le Lamentin]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFF.pdf chart]&lt;br /&gt;
* [[MDPP|MDPP - Gregorio Luperon Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/MDPP.pdf chart]&lt;br /&gt;
* [[TJSJ|TJSJ - Luis Munoz Marin Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TJSJ.pdf chart]&lt;br /&gt;
* [[FMEE|FMEE - St Denis Gillot]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/FMEE.pdf chart]&lt;br /&gt;
* [[TFFG|TFFG - Grand Case]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFG.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: &lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w070n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n20.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w090n20.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:TNCM-005.png|thumb|left|amazing]]&lt;br /&gt;
[[Image:TNCM-006.png|thumb|right|landing]] &lt;br /&gt;
* [[Piper_J3_Cub|Piper Cub]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=TKPK --aircraft=Cub&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
[[FlightGear Newsletter January 2011]] by [[User:Statto|Statto]], format and extended by [[User:Francescobrisa|Francescobrisa]].&lt;br /&gt;
&lt;br /&gt;
==Friedman Memorial Airport (Idaho)==&lt;br /&gt;
[[Image:KSUN-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:KSUN-002.png|thumb|right|nearby]] &lt;br /&gt;
Friedman Memorial Airport, Hailey, Idaho. This airport is nestled in a valley surrounded by significant terrain. It's one that shows up quite often in accident investigations. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KSUN.png|thumb|right|Latitude: 43.51223900 Longitude: -114.30376100]]&lt;br /&gt;
* [[KSUN|KSUN - Friedman Mem]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KSUN.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSUN-003.png|thumb|left|landing]]&lt;br /&gt;
[[Image:KSUN-004.png|thumb|right|landing]] &lt;br /&gt;
* [[FK9MK2]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KSUN --aircraft=fk9mk2&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wyoming - Grand Teton ==&lt;br /&gt;
Jackson Hole (KJAC) airport is located at around 6,400ft right next to the Teton range of mountains. The Tetons rise straight out of the plains, gaining over 5,000ft in 2 miles. &lt;br /&gt;
&lt;br /&gt;
You will need the w120n40 scenery.&lt;br /&gt;
&lt;br /&gt;
Tower frequency at KJAC is 118.07. Due to the high altitude, you will need to lean non-turbocharged piston aircraft before take-off. Don't forget that take-off distances will also be longer.&lt;br /&gt;
&lt;br /&gt;
After take-off head to the North East. Grand Teton is the highest of the three peaks that rise straight from the flat-lands. Follow the line of mountains to the East, passing over Jenny Lake. After a couple of miles you will reach a huge lake. The large bulk of a mountain to the East is Mount Moran.&lt;br /&gt;
&lt;br /&gt;
The Teton Mountain range is surprisingly thin - really just a string of mountains running SW-NE. Flying fast jets down the steep valleys is recommended.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
== Virginia Eastern Shore, Chesapeake Bay-Bridge Tunnel Sightseeing ==&lt;br /&gt;
[[Image:KTGI-001.png|thumb|left|before take off]]&lt;br /&gt;
[[Image:KTGI-002.png|thumb|right|right after take off]]&lt;br /&gt;
&lt;br /&gt;
Take a short VFR trip from Tangier Island to view the famous Chesapeake Bay Bridge-Tunnel connecting Cape Charles to Cape Henry. Depart historic Tangier Island (KTGI) situated in the Chesapeake Bay and land at Norfolk International Airport (KORF), Norfolk, Virginia. The scenic character of the flight is enhanced by leaving the island at dusk. The flight is both scenic and challenging. Frequently, when flying with real weather, you will have a steady wind blowing across the bay. Starting out quiet Tangier and arriving at busy, glittering Norfolk International (KORF) gives the flight some contrast.&lt;br /&gt;
&lt;br /&gt;
'''fgfs --airport=KTGI --runway=20 --timeofday=dusk'''&lt;br /&gt;
&lt;br /&gt;
Before leaving Tangier: Set your altimeter to the prevailing barometric temperature. Set your communications radio to the Norfolk Intl. (KORF) ATIS frequency of 127.150 MHz to listen for weather reports in the destination area. Set your navigation radio to 112.20 MHz to pick up the Cape Charles (CCV) VOR. Set your heading bug to the runway heading, 200.&lt;br /&gt;
&lt;br /&gt;
Takeoff straight, flying the runway heading. Climb to 2000ft and maintain.&lt;br /&gt;
&lt;br /&gt;
Shortly, you should see the VOR assigned to NAV1 display receive a steady signal (the OFF flag will disappear). The DME should also settle down and display the distance to the Cape Charles VOR station. The flight to CCV will be about 26 nautical miles. As you fly, it will show your airspeed and time to arrival. It should take about ten minutes.&lt;br /&gt;
&lt;br /&gt;
Turn the OBS knob until the VOR displays the TO flag and 190 degrees, the heading you should now turn to.&lt;br /&gt;
&lt;br /&gt;
Fly south from Tangier, crossing an expanse of water, about ten miles until you see the Virginia Eastern Shore. You'll come upon the grass airstrip of Chance (VA89) a few minutes out from Tangier. Beyond are two flashing tower beacons. You may catch a glimpse of Weirwood/Kellam (W08) on the ocean shore, recognizable by two crossing dirt strips.&lt;br /&gt;
&lt;br /&gt;
If you look carefully, you may see the little white building that is the Cape Charles VOR station. As you fly over VOR the flag will change from TO to FROM and the needle will deflect. Do not try to follow the needle. Wait until you are past the VOR. As you cross the VOR station, you should see a highway slanting across your path toward the south west. Turn to follow this highway. You'll come across a lone tower with beacon along the roadside. You'll see an access road stretching from the tower complex to the main road.&lt;br /&gt;
&lt;br /&gt;
If the sky conditions permit, you may try your hand at wayfinding by following the road. If visiblity is poor, set the VOR to 180 degrees to parallel the road to the end of the peninsula. Or you can continue to fly outbound from the VOR on 190 by maintaining the same heading. The VOR needle should return to center with the FROM flag displaying. This will put you west of the bridge with a good view and the option to turn towards KORF near the initial approach fix. If you follow the highway you will need to overfly the airport, but if you stay on the 190 heading, you will be in a position to make a straight in landing.&lt;br /&gt;
&lt;br /&gt;
As you fly down the peninsula you'll pass Cherrystone, Eagle's Nest, Scott and Bull Farm grass airstrips. Bull Farm is the last strip before the mouth of the Chesapeake. Just past Scott Farm you should see the first glimmer of the northern leg of the bridge. The grass strips can be very difficult to see.&lt;br /&gt;
&lt;br /&gt;
As you reach the end of the peninsula, be careful to avoid the tower on Fisherman's Island at the north end of the north leg of the bridge (Note the bridge is not modeled by FlightGear...but I hope to work up one eventually). Next comes the north middle leg. Turn right a few degrees to follow the south middle leg. Watch as the deck plunges beneath the waves to allow ships to navigate the north and south channels.&lt;br /&gt;
&lt;br /&gt;
As Cape Henry approaches, you'll see the Norfolk International airport to the right and the southern leg of the bridge touching the shore.&lt;br /&gt;
&lt;br /&gt;
If you intend to land at KORF, you will want to start your approach soon. Otherwise, you may continue to follow the bridge to the end. Make the approach to KORF by contacting the tower for vectors. Or use the ILS.&lt;br /&gt;
&lt;br /&gt;
This is a good flight to practice VOR flying on. It is a very straight flight path to the VOR requiring little adjustment and there are no other VORs in the area to confuse you.&lt;br /&gt;
*June 2006 by [[User:Sek|Sek]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KTGI.png|thumb|right|Latitude: 37.8250835 Longitude: -75.9976665]]&lt;br /&gt;
* [[KTGI|KTGI - Tangier Island]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KTGI.pdf chart]&lt;br /&gt;
* [[KORF|KORF - Norfolk International]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KORF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w80n30.tgz&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KTGI-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:KORF-001.png|thumb|right|landing to KORF]]&lt;br /&gt;
I have tried this trip using a Seneca II&lt;br /&gt;
* [[Piper PA34-200T Seneca II]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KTGI --runway=20 --timeofday=dusk  --aircraft=SenecaII&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prince George to Calgary Springbank==&lt;br /&gt;
A beautiful flight is from Prince George (CYXS), to Calgary Springbank (CYBW). Route created by reed, which can be seen at {{forum link|t=9772|text=the forums}}&lt;br /&gt;
*Published in [[FlightGear Newsletter November 2010]] By [[User:Cael|Cael]].&lt;br /&gt;
==Ketchikan to Juneau==&lt;br /&gt;
It's cold where we will go so dress up warm and if we are lucky we might see whales during our flight. Don't fly too high to enjoy the amazing views, and there is a small challenge at the end. The runways we will use are long enough for bigger aircraft (7000+). Total length of the trip will be around 245 NM. So, hop in the cockpit of your favourite airliner.&lt;br /&gt;
&lt;br /&gt;
Alaska, here we come! Enjoy!&lt;br /&gt;
#Park your aircraft on PAKT, [http://www.borough.ketchikan.ak.us/airport/airport_history.htm Ketchikan International], runway 11. The wind is coming from '''South''', change the weather if needed (SE is ok too). &lt;br /&gt;
#Fly North towards [[NDB]] Fredericks Point on 372.0 for 94 NM. &lt;br /&gt;
#Fly towards [[NDB]] Five Fingers on 295.0 for 39 NM. &lt;br /&gt;
#Fly towards [[NDB]] Gustavus on 219.0 for 77 NM. &lt;br /&gt;
#Fly towards [[NDB]] Coghlan Island on 212.0 for 32 NM.&lt;br /&gt;
#Set the [[ILS]] on 109.9 and land your aircraft (after 4 NM) on PAJN, [http://www.juneau.org/airport/ Juneau International], runway 08.&lt;br /&gt;
If you feel warm after this landing, you just crossed a NORAD microwave site, so that is why.&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]] [[FlightGear Newsletter November 2011]]&lt;br /&gt;
==Searching Wizard Island==&lt;br /&gt;
*USA, Oregon, Klamath County&lt;br /&gt;
With one [[VORTAC]] behind our back we do an [[IFR]]/[[VFR]] search of Wizard Island, a mysterious place, a sacred place for native Americans. You might even find the &amp;lt;tt&amp;gt;Old Man of the Lake&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Don't pull up the map, that would spoil the surprise but I promise '''unique views'''. We will land on a short lawn runway. Terrain [[altitude]] will range from 4,000 to a max of 8,930 feet and down again. Total length of the trip will be about 50 NM. Select your aircraft with care. It must have one working navigational radio (VOR-DME), a strong engine, a strong undercarriage, must be capable of a good climb and a steep descend. I suggest to use Fair weather (Environment=&amp;gt;Global Weather). If needed remove some clouds (View=&amp;gt;Rendering Options=&amp;gt;Slider 3d Clouds to the left).&lt;br /&gt;
[[File:Mount Scott.jpg|thumb|250 px|Mount Scott (8,929 feet) just after depart from 2S7 (Two Sierra Seven). Wizard Island is just to the North-West of it.]]&lt;br /&gt;
*Park your aircraft on 2S7 (Two Sierra Seven), Chiloguin-State.&lt;br /&gt;
*Set [[NAV1]] on 115.9 (Klamath Falls VORTAC) and on radial 323&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magnetic). We are at an [[elevation]] of 4,217 feet. Set QNH. Set heading bug at 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn).&lt;br /&gt;
*Take off an fly the course set with the heading bug.&lt;br /&gt;
*Intercept the radial.&lt;br /&gt;
*Monitor distance and you will find Wizard Island at 50 NM from Klamath Falls. The island has an elevation of 6,673 feet. I suggest a full 360&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; turn, take pictures.&lt;br /&gt;
*Set radial 318&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt;, keep the same frequency. Do a new radial intercept.&lt;br /&gt;
*Try and find the airstrip (3S6, Three Sierra Six, Toketee-State) at 71 NM from Klamath Falls with an elevation of 3,361 feet, runway heading 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn). There are bumps around you should avoid.&lt;br /&gt;
*If you are capable of finding the island, finding the airstrip and landing without a crash, in one go..., you are a wizard.&lt;br /&gt;
&lt;br /&gt;
Click [http://en.wikipedia.org/wiki/Crater_Lake this link] '''after''' you have landed so you know what amazing landscape you have seen.&lt;br /&gt;
&lt;br /&gt;
*December 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter March 2012]].&lt;br /&gt;
&lt;br /&gt;
=South America=&lt;br /&gt;
==Southern Tip of Chile==&lt;br /&gt;
[[Image:Scgz-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:Scgz-004.png|thumb|right|Some part of the scenery]]&lt;br /&gt;
Gary Carvell: Here is a suggestion for the FlightGear Places to Fly page. I don't have any particular routes, just fly around and enjoy the gorgeous scenery.&amp;lt;BR/&amp;gt;&lt;br /&gt;
These three airports are in the same region of the very southern tip of Argentina. This area is a scenic wonderland - a maze of islands, mountains, and ocean channels. Hours of entertainment.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SCGZ - Puerto Williams Guardiamarina Zanartu Airport, Chile Located on the north coast of Isla Navarino facing the Beagle Channel. At 55 deg S. longitude, Puerto Williams is considered the southernmost town in the world.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SAWH - Ushuaia Islas Malvinas Airport&lt;br /&gt;
SAWO - Ushuaia Est Aeronaval Airport&lt;br /&gt;
Ushuaia, on the south coast of Isla Grande de Tierra del Fuego, on the the Beagle Channel.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:Sawh-004.png|thumb|left|Approaching Ushumaia Malvinas Argentinas]]&lt;br /&gt;
[[Image:World-scgz.png|thumb|right|Latitude: -54.931072 Longitude: -67.626261]]&lt;br /&gt;
&lt;br /&gt;
* [[SCGZ|SCGZ - Guardiamarina Zanartu]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SCGZ.pdf chart]&lt;br /&gt;
* [[SAWH|SAWH - Ushuaia Malvinas Argentinas]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWH.pdf chart]&lt;br /&gt;
* [[SAWO|SAWO - Ushuaia Est Aeronaval]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWO.pdf chart]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:Scgz-002.png|thumb|left|Just left the scgz airport]]&lt;br /&gt;
I personally like to fly this area in the [[Consolidated_Aircraft_PBY_Catalina|Catalina]], it's a great sightseeing plane with the advantage that you can take off and land just about anywhere. &lt;br /&gt;
* [[Consolidated_Aircraft_PBY_Catalina|Catalina]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SCGZ --aircraft=Catalina&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Copacabana to San Rafael over Lake Titicaca==&lt;br /&gt;
Bolivia to Peru. This trip will lead you over one of the highest and deepest lakes in the world towards the highest airfield in the world. It a demonstration of a [[IFR]] flight towards a fix and a demonstration how accurate FlightGear simulates air density and the effects it has on aircraft.&lt;br /&gt;
[[File:Slcc-sprf.jpg|thumb|200px|left|Flight and fix SLCC to SPRF]]&lt;br /&gt;
Place your aircraft on the airfield [http://en.wikipedia.org/wiki/Copacabana,_Bolivia SLCC, Copacabana], with an [[elevation]] of 12,592 feet. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M). &lt;br /&gt;
&lt;br /&gt;
We will fly towards and land at SPRF. If you would enter SLCC and SPRF in [[Kelpie]] planner you probably would not be able to find SPRF. To find SPRF I am adding an additional VOR-DME station and for a good fix give you another VOR-DME. Try Kelpie planner to plan this route and compare with this suggestion.&lt;br /&gt;
&lt;br /&gt;
Equipment preparation. Set [[NAV1]] to [http://en.wikipedia.org/wiki/Juliaca Juliaca] VOR-DME on 155.55 with a radial of 311° (magnetic). Set [[NAV2]] to Arequipa VOR-DME on 113.7 with a radial of 212°. During our flight we will fly with [[true altitude]] as set with [[QNH]], keep QNH updated. Arm the autopilot with the [[heading bug]] at 311° and an initial altitude of 13,500 feet.&lt;br /&gt;
&lt;br /&gt;
Take off and if you took the wrong RW pull up hard. Take a small tour over [http://en.wikipedia.org/wiki/Titicaca lake Titicaca], see the floating islands and try to find the lost golden treasure. Intercept the nearest radial on NAV1 towards Juliaca (about 311°). &lt;br /&gt;
&lt;br /&gt;
Just before Juliaca is a hill so while on lake Titicaca increase altitude to 14,200 feet, the [[VFR]] part of this trip is over. After passing Juliaca set the radial of NAV1 to 352° and set the altitude to 17,422 feet. We will fly from NAV1 and slowly increase altitude.&lt;br /&gt;
&lt;br /&gt;
At a distance of about 60 NM set the heading bug on the current course. Monitor the distance to NAV1, the radial of NAV2 and the distance to NAV2. At a distance of 74.5 NM to NAV1, a distance of 140.7 NM and at the '''radial''' intercept of NAV2 should be the runway. So, from 60 NM onwards, look outside the window, then at NAV1 and then NAV2 etc.&lt;br /&gt;
&lt;br /&gt;
If you are at 80NM to NAV1 you have missed the airfield but you still won't hit any hills (unless you bank left). Bank right and set the heading bug to 172°. Fly back towards NAV1 and intercept the radial 352° at about 50NM again to repeat the search.&lt;br /&gt;
&lt;br /&gt;
The runway SPRF, San Rafael, has a elevation of 14,422 feet and a heading of 297°/ 117°. Our initial altitude has been set 3,000NM above the RW elevation. That should give sufficient room for navigation.&lt;br /&gt;
&lt;br /&gt;
After you have seen the airfield set the radial of NAV1 to 297°, the heading of the runway (not the course to the runway) as a visual aid. Land on RW 30 (and not on RW 12 unless you are a show-off). Oh, there is a small hill in front of RW 30, just so you know.&lt;br /&gt;
&lt;br /&gt;
Decreasing speed at this altitude can be a bit tricky. The air is thin and does not give much resistance. Next to that, the difference between [[indicated airspeed]] and [[ground speed]] is very noticeable. The ground speed is much higher as the indicated airspeed.&lt;br /&gt;
&lt;br /&gt;
After a successful landing, try to discover the origin of the Amazon river since we are now at the starting point of that trip.&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]], published in [[FlightGear_Newsletter_February_2012#Suggested_flights| Newsletter February 2012]].&lt;br /&gt;
&lt;br /&gt;
==Origin of the Amazon River==&lt;br /&gt;
[[Image:SPRF-001.png|thumb|left|high altitude]]&lt;br /&gt;
[[Image:SPRF-002.png|thumb|right|high altitude]] &lt;br /&gt;
Peru. For this [[IFR]] tour (with [[VFR]] parts) we take off from the highest airfield in the world to discover the origin of the [http://en.wikipedia.org/wiki/Amazon_River Amazon river] in South America. I promise spectacular mountains and valleys. The total length of this trip is about 175 NM.&lt;br /&gt;
&lt;br /&gt;
Place your aircraft on the airfield SPRF, San Rafael. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M).&lt;br /&gt;
&lt;br /&gt;
Equipment preparation: Set [[NAV1]] to [http://en.wikipedia.org/wiki/Arequipa Arequipa] VOR-DME at 113.7 with a radial of 176° (magnetic). Set [[NAV2]] to [http://en.wikipedia.org/wiki/Cusco Cusco] VOR-DME at 114.9 also with a radial of 176°.&lt;br /&gt;
Set [[QNH]] and during flight keep correcting it, it's a bad idea to use [[Pressure altitude]] during this flight. Set the [[heading bug]] to 250°. Arm the [[autopilot]] and set the initial [[altitude]] to 16,000 feet.&lt;br /&gt;
&lt;br /&gt;
The airfield SPRF, San Rafael has an [[elevation]] of 14,422 feet. That altitude will cause problems during take-off. It takes a lot longer for the aircraft to gain sufficient speed for take-off, also the take-off speed that is needed is higher as you would expect. Perhaps an additional notch of flaps is needed.&lt;br /&gt;
&lt;br /&gt;
Take-off, avoid the bumps (there are plenty) and fly a course of 250°. After about 80 NM you will fly over the radial of NAV1. Intercept the radial towards Arequipa. At a distance of 75 NM towards NAV1 you will have to increase altitude to 19,000 feet. &lt;br /&gt;
&lt;br /&gt;
At a distance of 50 NM towards NAV1 and 118 NM from NAV2 you will see and cross over the mountain [http://en.wikipedia.org/wiki/Nevado_Mismi Nevado Mismi] with an altitude of 18,362 ft. The rains and water on the area to the right until Nevado Mismi will leave towards the Atlantic ocean through the Amazon river. Anything to the left and after Nevado Mismi will leave towards the Pacific ocean.&lt;br /&gt;
&lt;br /&gt;
After Nevado Mismi you are tempted to descend. Don't. Just before the airfield is [http://en.wikipedia.org/wiki/Chachani Mt.Chachani] with an altitude of 19,872 feet and to the East is the active volcano [http://en.wikipedia.org/wiki/El_Misti El Misti] with an altitude of 19,101 feet. You can either increase the altitude and fly over the airfield or keep the altitude, even descend and fly between the mountains, your choice depends on the visibility.&lt;br /&gt;
&lt;br /&gt;
Fly using the heading bug and set NAV1 to [[ILS]] 109.7 with a radial of 93.2°. We will land at airfield [http://en.wikipedia.org/wiki/Rodr%C3%ADguez_Ball%C3%B3n_International_Airport SPQU, Rodriguez ballon], that has an elevation of 8,405 feet. There is a reason this airfield has just one ILS. The area South-West of the airfield is below 11,405 feet and is safe to navigate.&lt;br /&gt;
&lt;br /&gt;
Position the aircraft in front of the runway at an altitude of 11,405 feet, catch the [[glidescope]] at a distance of 9.5 NM and land your aircraft. After landing and parking your aircraft crawl into the tower to look around.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter May 2012]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:SPQU-001.png|thumb|left|pre - landing]]&lt;br /&gt;
[[Image:World-SPRF.png|thumb|right|Latitude: -14.267 Longitude: -70.467]]&lt;br /&gt;
* [[SPRF|SPRF - San Rafael]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPRF.pdf chart]&lt;br /&gt;
* [[SPQU|SPQU - Rodriguez Ballon]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPQU.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w020s80.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:SPQU-002.png|thumb|right|landed]] &lt;br /&gt;
I recomend a powerful jet angine airplane, but not too heavy !&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SPRF --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Middle East=&lt;br /&gt;
==Israel to Jordan over the Dead Sea==&lt;br /&gt;
[[Image:LLBS-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LLBS-002.png|thumb|right|flat land]] &lt;br /&gt;
Dead Sea is the lowest water elevation on the Earth. Take off from the Beer-Sheva Teyman airport and head East-North-East. About half way there, after the southern Hebron mountains ridge, there'll be a sharp drop-off down to the Dead Sea --- the lowest exposed point on the Earth.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It's really fun to descend and explore the beautiful coastline. In the real life, you wouldn't like to fly low over this water there of your own will --- while you don't need a life vest in the Dead Sea, the water is pretty caustic there for one's eyes. Once you're done marvelling the sights, continue on to the Queen Alia airport. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LLBS-006.png|thumb|left|landing in the dead sea, notice the altitude !]]&lt;br /&gt;
[[Image:OJAI-007.png|thumb|right|landing at Queen Alia Intl.]] &lt;br /&gt;
[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]&lt;br /&gt;
* [[LLBS|LLBS - Teyman]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LLBS.pdf chart]&lt;br /&gt;
* [[OJAI|OJAI - Queen Alia Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/OJAI.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/e030n30.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:LLBS-003.png|thumb|left|approaching the dead sea]]&lt;br /&gt;
[[Image:LLBS-004.png|thumb|right|there is also a minor airport]] &lt;br /&gt;
* [[Albatross]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LLBS --aircraft=Albatross&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Europe=&lt;br /&gt;
==Edinburgh to Oban==&lt;br /&gt;
See article: [[Edinburgh to Oban]].&lt;br /&gt;
&lt;br /&gt;
==Oban to Prestwick==&lt;br /&gt;
The west coast of Scotland offers some stunning scenery and a number of small airfields and airports to land at on both the mainland and the small islands the dot the coast. The distances between the various airfields are quite small, and some of the runways are on the short side, so STOL or GA aircraft are ideal. The tour suggested here follows part of a microlight trip I made this month, photos of which can be found [http://www.nanjika.co.uk/photos/gigha/ here].&lt;br /&gt;
&lt;br /&gt;
Oban airport (EGEO) lies on the west coast of Scotland, and offers fuel (both AVGAS and AVTUR) and a North/South tarmac runway.&lt;br /&gt;
&lt;br /&gt;
From Oban it is just a 10 minute flight west to the grass airfield of Glenforsa (EG45), on the north-east coast of the island of Mull. Due to the hills and water channel, this airfield often gets quite strange wind patterns - the weather can be perfect in Oban, but much gustier and windier at Glenforsa. At times the windsocks at either end of the runway can blow in completely opposite directions!&lt;br /&gt;
&lt;br /&gt;
Some distance north of Oban lie the airfields of the Isle of Skye (EG57) and Plockton (EG81). This is an excellent place from which to explore the mountains of the Isle of Skye, known as the Cuilins.&lt;br /&gt;
&lt;br /&gt;
Heading south from Oban, one can follow the coast to the island of Jura, with it's distinctive hills (The Paps of Jura). From Jura one can head south to the island of Islay with its numarous malt whisky distilleries (many of which are modelled in FG). Islay Airport (EGPI) has extensive runways. From Islay head north east to the tiny island of Gigha. Despite it's small size, it too has an airfield (EG44), though the FG version is tarmac rather than grass.&lt;br /&gt;
&lt;br /&gt;
From Gigha head east over the Mull of Kintyre, to the hilly isle of Arran, then north east to the Isle of Bute. Both islands have very small grass airstrips, which are sadly not present in FG. From Bute you can head south east to Prestwick International (EGPK), famous for being the only place Elvis touched down in the UK, and a fine place to end our tour.&lt;br /&gt;
*Published in [[FlightGear Newsletter July 2011]] by [[User:Stuart|Stuart]]&lt;br /&gt;
&lt;br /&gt;
== Edinburgh to Dundee ==&lt;br /&gt;
Edinburgh Airport (EGPH) is located to the West of the city of Edinburgh and south of the Forth rail and road bridges. You'll need the w010n50 scenery and the latest set of objects from the scenery DB which include a number of models for the Edinburgh area.&lt;br /&gt;
&lt;br /&gt;
From Edinburgh Airport, head north and circle the bridges, then follow the coast on the south eastwards past Edinburgh (watch out for the Castle!) and to East Lothian and Bass Rock - a volcanic plug in the sea that is host to thousands of sea-birds.&lt;br /&gt;
&lt;br /&gt;
There are a number of sights in East Lothian, include a distillery.&lt;br /&gt;
&lt;br /&gt;
If you wish to continue your tour, head back North, crossing the Firth of Forth to the Kingdom of Fife. Head approximated North West, tracking towards the Perth VOR (110.4). There is an airport here (Perth Scone, EGPT), but instead we will now track out on the 090 radial and pick up the ILS to Dundee Airport (108.10) landing beside the sea.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
==Austrian alps soaring==&lt;br /&gt;
Discover the Austrian alps with a glider. [[Pinzgauer Spaziergang]]&lt;br /&gt;
&lt;br /&gt;
== Sightseeing the Alps in a C172 ==&lt;br /&gt;
This tour will guide you to many of the most famous mountains, valleys, glaciers, snowfields, winter and summer vacation areas, etc. in the European Alps. In addition there are several hints to visit nearby areas of interest. On the tour you will visit Switzerland, Italy and France.&lt;br /&gt;
See the detailed description in: http://www.emmerich-j.de/FGFS/Alp-flying.pdf (mirrored to https://beni.hallinger.org/fgfs.nobackup/Alp-Tour-Jomo/)&lt;br /&gt;
*February 2011 by [[User:Jomo|Jomo &amp;amp;dagger;]].;&lt;br /&gt;
&lt;br /&gt;
* The scenic trip does take about 2 hours.&lt;br /&gt;
* Skyvector route: https://skyvector.com/?ll=46.464097146192884,7.159790050777061&amp;amp;chart=301&amp;amp;zoom=6&amp;amp;fpl=%20LSZC%204700N00836E%204647N00840E%204642N00836E%204637N00835E%204634N00823E%204634N00812E%204633N00809E%204634N00805E%204634N00801E%204631N00803E%204624N00746E%204619N00745E%204618N00753E%204614N00752E%204612N00749E%204609N00747E%204603N00746E%204601N00745E%204600N00738E%204555N00724E%204555N00712E%204553N00703E%204547N00652E%204549N00649E%204604N00634E%20LSGG&lt;br /&gt;
&lt;br /&gt;
== Salzburg to Zell am See via Hallstatt ==&lt;br /&gt;
[[File:LOWS-LOGO-LOWZ.jpg|thumb|The route for Salzburg to Zell am See via Hallstatt]]&lt;br /&gt;
This flight will bring you around a very scenic region of the austrian alps.&lt;br /&gt;
* [https://skyvector.com/?ll=47.5666119817603,13.107925427128999&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A040%20LOWS%204735N01311E%204736N01339E%204733N01340E%204733N01343E%204735N01343E%204738N01355E%204727N01357E%20LOWZ SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 1 hr. air time at 120 KTAS.&lt;br /&gt;
* Fly at an altitude of about 4000ft or so (the entire trip can be done at that altitude safely).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start ''Salzburg (LOWS)''; follow the Autobahn in the valley to the southeast until you reach the fork at ''Golling''. To the south you see the Mountains of the ''Tennengebirge''.&lt;br /&gt;
* Alternatively (and I recommned that), you can also deviate sothwest around ''Mt. Untersberg'' (1972m, hosting germanys longest and deepest cave, the ''Riesending'') to visit lake ''Königsee'' and watch the peaks of the ''Steinernes Meer'' (the dominant and very famous ''Mt. Watzmann'', 2713m!) and north side of the ''Mt. Hochkönig''. You need to climb to at least 6200ft to cross the final ridge at the end of the lake valley. After crossing, descend to 4000ft, follow the valley and fly north at the next valley to rejoin the route.&lt;br /&gt;
* Turn east and follow the valley and hills, aim for a prominent V-shaped incision at the end. Fly through there and you suddenly break out at the lake ''Hallstätter See'', a fjord-like lake 125m deep.&lt;br /&gt;
* Follow the ''Hallstätter See'' to the south, on its western shore is the famous town of ''Hallstatt''. At the mountain to your right (north of Hallstatt) is a very old settlement dating back to the late bronce age (Hallstattzeit, c. 800–450 BC) and there was a very important Salt mine dating back to that time and important archeological grave findings.&lt;br /&gt;
Looking south you can see the ''Dachstein'' (2995 m), a high peak hosting the ''Hirlatzhöhle'', with 120km the twentiest longest and with 1560m sixth deepest cave of planet earth.&lt;br /&gt;
* Follow the valley east bend to ''Obertraun'', and then north over the ''Koppenpass'' and the town of ''Bad Aussee''.&lt;br /&gt;
* From ''Bad Aussee'', fly straight to the lakes ''Grundlsee'' and ''Toplitzsee'' (you can't see the latter yet).&lt;br /&gt;
* Between the two, turn southwards and aim for the reservoir lake ''Salza'' which is in the sharp incision you can see to the south.&lt;br /&gt;
* After passing the reservoir, you may try to get down to ''Niederoblarn'' (LOGO) to the southeast, it's a short airfield.&lt;br /&gt;
* From there, follow the railway in the valley of Enns westwards, LOWZ is about 20 minutes away. On your right side watch out for the other side of the ''Dachstein'' and the town of ''Schladming'', which lies down in the valley next the rocky hills with the river flowing trough. Look for the railway and the river Enns.&lt;br /&gt;
* Behind ''Schladming'' (south of Mt. ''Dachstein'', approximately halfway of the distance LOGO/LOWZ) the valley will widen a bit again, featuring a rocky mountain in the middle of the valley. Continue to follow the railway and river bending nortwest arond the small mountain.&lt;br /&gt;
* Near the bigger town of ''Radstadt'' the valley will open significantly. Follow west, heading for the next town ''Altenmark'' at the end of the opening.&lt;br /&gt;
* The railway will bend north at ''Altenmark'' and soon join the Autobahn A10/E55. This is the point we need to go southwest and follow the next valley.&lt;br /&gt;
* The valley leads us westward to the Town of ''St. Johann/Pongau''. probably around the middle of the valley you can spot the prominent ''Mt. Hochkönig'' (2941m) northwest of ''St. Johann'' and the ''Tennengebirge'' to its right.&lt;br /&gt;
* Once reaching ''St. Johann'', continue to follow the next big valley west-southwest.&lt;br /&gt;
* After about 16 miles you will reach ''Zell am See'' (LOWZ) where we will land after around one hour flight time in total. Beware this is a short field.&lt;br /&gt;
&lt;br /&gt;
== Zell am See to Innsbruck via Mt. Venediger ==&lt;br /&gt;
[[File:LOWZ-LOWI.jpg|thumb|The route for Zell am See to Innsbruck]]&lt;br /&gt;
This flight will bring you to two of the core peaks of the Alpenhauptkamm.&lt;br /&gt;
* [https://skyvector.com/?ll=47.201656734623775,12.160079968084839&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A120%20LOWZ%20LOWZ%204708N01241E%204708N01221E%204706N01214E%204710N01152E%204724N01150E%20LOWI SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 45 minutes air time at 110 KTAS.&lt;br /&gt;
* Climb to at an altitude of about 10000ft or so after starting from [[:File:Lowz-parking.jpg|Zell am See]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After starting fly into the valley southwest over the town of ''Kaprun''. Maybe you need to circle a bit to gain altitude, near the mountains we need at least about 10000ft!&lt;br /&gt;
* Follow the valley until you overfly two lakes (''Stausee Wasserfallboden'' and ''Moorboden''). To your left you can see ''Mt. Großes Wiesbachhorn'' (3564m).&lt;br /&gt;
* The end of the valley goes over into a flank of the ''Großglockner'' which is near to the south. Follow the west bend of the valley end and fly over the lakes ''Tauernmoossee'' and ''Weißsee''. After you climb out of the valley, you already should see the peak of ''Mt. Venediger'' on the front left. Aim to the saddle right of its peak.&lt;br /&gt;
* You then fly that direction over several valleys that go from south to north, until you hit the very big valley that bend from south to west. The ridgeline right of that valley is the border between the Austrian states Tirol and Salzburg. Follow the valley up to the ''Venediger'', passing the ''Mt. Sandebentörl'' (2751m), still aiming for the saddle.&lt;br /&gt;
* Shortly after you reach the end of the valley and need to overfly the saddle with the glacier ''Venedigerkees'' behind it. The ridgeline is again the border between Tirol and Salzburg. Directly south of the ''Venedigerkees'' is the pyramid of ''Mt. Venediger''.&lt;br /&gt;
* Follow ''Venedigers'' ridge to the southwest, skip the first valley and overfly the next ridge.&lt;br /&gt;
* From here you can deviate into the valley north and visit the ''Krimmler Wasserfälle'', and from there west trough the main valley.&lt;br /&gt;
* If you instead follow the planned route westwards, aim to the peak of ''Mt. Zillerplattenspitze'' (3148m) with the small lake ''Eissee'' to its south flank which you should already see. This is a little hard to get right, but don't fly directly into the big valley but aim right to the second row mountain peaks at about 280 heading.&lt;br /&gt;
* Overfly the ridge with ''Eissee'' and follow the valley from there nothwest with the reservoir ''Zillergründl'' and ''Mt. Reichenspitze'' (3303m) to its right; until you reach the town ''Mayrhofen'' where the current valley meets the ''Zillertal'' valley. You also should start to descend now to about 3500ft with a rate of roughly -1000fpm.&lt;br /&gt;
* From ''Mayrhofen'' follow the ''Zillertal'' valley north and when reaching the ''Inntal'' valley near the town ''Jenbach'', Innsbruck Airport is a few minutes to the west. If you like, you can divert north at ''Jenbach'' to visit ''Achensee'', and even continue further north to land at Munich via lake ''Tegernsee'' or via the Isartal over ''Bad Tölz''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Crossing the alps ==&lt;br /&gt;
[[File:ED02-LIPB.jpg|thumb|The route for Fuessen to Bolzano]]&lt;br /&gt;
This trip brings us from germany via austria to italy, crossing the alps, visiting the famous castle Neuschwanstein and Mt. Zugspitze, germanys highest peak.&lt;br /&gt;
* [https://skyvector.com/?ll=47.068251080980836,10.959411633048108&amp;amp;chart=301&amp;amp;zoom=5&amp;amp;fpl=N01204735N01041E%204734N01045E%204729N01042E%204726N01046E%204724N01054E%204712N01054E%204704N01058E%204656N01103E%204655N01106E%204653N01109E%204650N01110E%204648N01113E%204638N01110E%20LIPB SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather and time (I suggest to start with the first light/sunrise).&lt;br /&gt;
* There are no helpful navaids for this trip, but Bolzano NDB: 362 BZO may serve as a final guidance.&lt;br /&gt;
* Trip takes around 45 minutes air time at 120 KTAS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start at ED02 Fuessen, climb to about 3000 and head southeast to visit castle Neuschwanstein, south of the Forgensee.&lt;br /&gt;
* After looking at the castle (challenge: fly close around behind it), we start climbing to 3500 and aim southwestish and cross over from germany to austria.&lt;br /&gt;
* Fly into the big valley directing south. East of Reutte start climbing 500fpm to 6000 and follow the railway in the valley to the southeast.&lt;br /&gt;
* Once the valley opens significantly, you can see the famous mountain Zugspitze (germanys highest peak, 2962 m) to the front.&lt;br /&gt;
* Head southwards around the Mt. Gartnerwand over town Ehrwald and fly between the two small peaks over the Marienbergjoch mountain pass, 1789m/5870ft (between Mt. Wanning and Mt. Marienberg; challenge: who can make it with the least altitude?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After overflying the second mountain, to the south comes a new valley called Ötzal where you fly into.&lt;br /&gt;
* Follow that valley all the way to the south and slowly climb to at least 8600 now (300fpm or so). Note overflying Längenfelden, where the dominant valley joins from the east with the river Fischbach, halfaway the leg; this looks similar to the end, but isn't.&lt;br /&gt;
* Follow the valley until it starts to branch in all different directions at the end (over the town of Sölden and Zwieselstein).&lt;br /&gt;
* We follow the Southeast main branch and then turn quickly to a smaller valley branching off directly eastwards (look for the mountain pass road).&lt;br /&gt;
* That brings us to the mountain pass of the Timmelsjoch and is the place where we cross over to Italy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After passing, we can descend to 2500 or so, following the terrain. Follow the valley and its river &amp;quot;Passer&amp;quot; southeast, and follow its bend to the south.&lt;br /&gt;
* Follow the valley and make a nice turn around Mt. Kolbenspitze's east ridge, over San Leonardo, still following the Passer river now southwards.&lt;br /&gt;
* Where the valley hits the next big valley &amp;quot;Etschtal&amp;quot;, is a bigger famous city called Merano. From there we follow the River Etsch and the Autobahn (highway) to the south and are soon approaching the somewhat hidden airport of Bolzano (LIPB) after an estimated time of somewhat under one hour at 120 knots.&lt;br /&gt;
&lt;br /&gt;
From here you can also continue more to the south to Trento (LIDT, total FT ~1:00) or Verona (LIPX, total FT ~1:20) - just follow the river Etsch to the south! Venezia is also not far away, just ~30 minutes/62nm to the east of Verona.&lt;br /&gt;
&lt;br /&gt;
==Grenoble Le-Versoud==&lt;br /&gt;
&lt;br /&gt;
[[Image:LFLG.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
France : '''LFLG'''  ( Grenoble Le-Versoud ) airport : border of Alps&lt;br /&gt;
*P.A.F. home base [http://equipe-flightgear.forumactif.com/ link]&lt;br /&gt;
*Scenery : http://clemaez.fr/flightgear/flightgearfrance_05062011.tar.gz&lt;br /&gt;
*Texture : http://clemaez.fr/flightgear/pattentextures_maj24082011.tar.gz&lt;br /&gt;
&lt;br /&gt;
* Take-off from Grenoble le Versoud (LFLG). Head south following the general direction of the Alps. Bearing left (East) will take you into high alpine territory, while towards the West lie the plains of the Rhône valley. Once you reach the Mediterranean coast, follow it to land in Marseilles (LFML), Nice (LFMN), or another smaller airport serving the French Riviera.&lt;br /&gt;
*Published in [[Custom France Scenery]].&lt;br /&gt;
&lt;br /&gt;
==Gulf of Finland sightseeing tour==&lt;br /&gt;
Take a VFR sightseeing tour over the Gulf of Finland from Helsinki to Tallinn! Estonia's landmarks are all recent additions, while Helsinki was one of the first cities to have original models in the scenery model database.&lt;br /&gt;
&lt;br /&gt;
Take off from the smaller EFHF airfield in Helsinki, or try your luck fighting the virtual traffic at Vantaa, and head toward the port of Helsinki. Look for the Hartwall Arena, the Pasila tower, the railway station and the Olympic Stadium along the way. Make your way out over the Gulf flying just west of south - a heading of 190 should set you up nicely for a sightseeing tour of Tallinn. Try to come in from the west and do a sweeping left turn over the capital of Estonia, looking out for the Swissotel, Olympic Hotel, the Television tower, and other important landmarks in the capital city of Estonia. Make sure you look out for St. Olaf's Church, the tallest building in the capital city. Make your way over the Ulemiste Jarv (lake) to land on runway 09 at Tallinn's main airport.&lt;br /&gt;
&lt;br /&gt;
If you desire, you can do a touch-and-go at Tallinn and set your course southeastward, landing at Tartu Airport, which is also modelled in FlightGear.&lt;br /&gt;
&lt;br /&gt;
The distance between Helsinki and Tallinn is about 50 miles or 80 kilometres, while Tartu is twice the distance from Tallinn at 100 miles/160 kilometres. Fly a heading of 135 to get to Tartu from Tallinn.&lt;br /&gt;
*Published in [[FlightGear Newsletter October 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
==Azores==&lt;br /&gt;
[[Image:LPLA-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LPLA-002.png|thumb|right|approaching island]] &lt;br /&gt;
The [http://en.wikipedia.org/wiki/Azores Azores], set in the middle of the Atlantic ocean, has had many names. Fortunate Isles, the Blue Islands, the Islands of Tin and Silver, the Islands of the Seven Cities. We can add, the Islands of Amazing Sights and Flights.&lt;br /&gt;
&lt;br /&gt;
Our flight is to celebrate the amazing views FlightGear can give us.&lt;br /&gt;
&lt;br /&gt;
Start your plane at [[Lajes Field]] (LPLA). This once was an emergency landing site for the [[Space Shuttle]] so you will have plenty of room to take off.&lt;br /&gt;
We will have to fly an odd pattern. The reason for that: if you don't fly too high (stick around 3000 while you can) you will have some amazing views.&lt;br /&gt;
&lt;br /&gt;
Next, fly towards and over LPPD. Look out the window and enjoy the view. Then head out towards LPHR. If you feel LPHR coming near, look out the window good, you might have to pull your plane up.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
*Published in [[FlightGear Newsletter August 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LPPD-001.png|thumb|left|over the island]]&lt;br /&gt;
[[Image:LPPD-002.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LPLA|LPLA - Lajes Field]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPLA.pdf chart]&lt;br /&gt;
* [[LPPD|LPPD - Ponta del gada]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPPD.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w020n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LPLA --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Canary Islands Trip ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An archipelago in the middle of the Atlantic sea, stunning beauty where you won't expect it. Seven islands, seven continents, thats what the canarian people say. And it's true, you will face seven totally different islands and nine different airports. &lt;br /&gt;
Take off from the largest one, GCLP, at the main island Gran Canaria. Leave the beautiful island heading to the west, and land at GCTS, the southern airport at Tenerife. Enjoy the view on Spains highest mountain, the glaciered Teide, when flying to La Gomera (GCGM), one of the greenest islands there. Master the short runway, and enjoy the view, before taking the challenge and approach El Hierro (GCHI). A short runway, with cliffs and rocks on both ends will cause you to sweat. From this island, which was claimed to be the western end of the world in medieval times, you'll turn to the beautiful and wild island of La Palma (GCLA). The next approach will be historical, because you are approaching the notorious Tenerife North (GCXO). Yes, I am serious, you will face that airport, where the worst civil plane crash ever took place. But you needn't worry, if you got that far, you will do this approach as easy as any other. The longest flight on your trip will take you to the eastern island, Lanzarote (GCRR). Take a look at the volcanic-red mountains, the vineyards, and the beaches. You want more beaches?? Depart to the south-west, fly over the small island of Los Lobos, and land in the holiday-paradise Fuerteventura. Enjoy dunes, bays, and very nice long beaches, before you finally touch down in Fuerteventura (GCFV). You want to stay? Okay, let's taxi to a parking position, and cut off the engines. If you still want more, fly back to Gran Canaria's GCLP, where we started our trip. &lt;br /&gt;
&lt;br /&gt;
Custom scenery: [[Canary Islands Custom Scenery]] / direct source: https://github.com/D-ECHO/Canarys &lt;br /&gt;
&lt;br /&gt;
=== Suggested Aircraft ===&lt;br /&gt;
&lt;br /&gt;
* small civil aircraft, such as the Cessna Skylane, Skyhawk, or Citation&lt;br /&gt;
* small airliners, like the Q400, the ATR72, the CRJ200, or similar&lt;br /&gt;
&lt;br /&gt;
Route by Flycanarias&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gibraltar==&lt;br /&gt;
[[Image:LEMG-010.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LEMG-011.png|thumb|right|just after take off]] &lt;br /&gt;
Traffic lights turn red, gates are closed. The only busy main road to the peninsula is closed and all the cars and trucks are waiting patiently. Waiting for a train to pass? No. Waiting for a plane to pass since the main road crosses a busy runway.&lt;br /&gt;
&lt;br /&gt;
On both sides water and being crossed by a busy main road can only be one runway: [http://en.wikipedia.org/wiki/Gibraltar_Airport Gibraltar airport]!&lt;br /&gt;
&lt;br /&gt;
One would expect an ILS installed on such a tricky runway but no, you will have to guess where it is and how far away it is. Not even an ADF points to it. &lt;br /&gt;
&lt;br /&gt;
Take off from LEMG (Malaga). Go South-West and find the runway of LXGB somewhere to the right of the rock. Happy guessing!&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LEMG-013.png|thumb|left|search for this]]&lt;br /&gt;
[[Image:LEMG-015.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LEMG|LEMG - Malaga]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LEMG.pdf chart]&lt;br /&gt;
* [[LXGB|LXGB - Gibraltar]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LXGB.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w010n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Piper Aerostar]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LEMG --aircraft=aerostar700 --adf1=300 --nav1=300:117.80&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Asia=&lt;br /&gt;
==Khorog, Tajikistan==&lt;br /&gt;
[[File:Fw190HinduKush.jpeg|left|thumb|Approaching a bank of snow-covered mountains in the south of the Hindu Kush]]&lt;br /&gt;
Surrounded by spectacular mountains and nestled in the end of a valley, Khorog Airfield (UT1C) makes an interesting place to land. It can only be approached by flying down the curved valley that snakes in from the North. Flying from here to OPCH (Chitral, Pakistan) at around 500ft AGL all the way is a wonderful way to explore the Hindu Kush mountains.&lt;br /&gt;
&lt;br /&gt;
If you bring a piston engined aircraft, be prepared to adjust the mixture as you climb - at the highest point in the flight, you will be at around 22000ft. Also, don't forget to carry plenty of fuel - there are very few airfields in the Hindu Kush that exist in FlightGear. This is a scenery bug that will hopefully be fixed in the future.&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:Armchair Ace| Armchair Ace]], published in [[FlightGear_Newsletter_January_2012#Suggested_flights| Newsletter January 2012]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Central Karakoram range ==&lt;br /&gt;
Let's explore one of the highest regions of the planet - the central Karakoram with the densest concentration of mountains of 8000 m and above. We're going to need a good climbing performance for the trip - even the frozen plateau of Baltoro glacier, above which K2 and Gasherbrum V and VI loom, is more than 13,000 ft high.&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram1.jpg|300px|thumb|left|Circling Gasherbrum I]]&lt;br /&gt;
&lt;br /&gt;
Take off from Skardu airport in Pakistan (OPSD). Skardu has a reasonably long (11,944 ft) runway at just 7,316 ft elevation, so you can take a jet, but for instance the [[De Havilland Canada DHC-6 Twin Otter|Twin Otter]] is more stylish. &lt;br /&gt;
&lt;br /&gt;
South of Skardu lies Deosai park, a famous high plateau, but we turn initially east. There's a chain of lakes which is the Indus river. After about five miles, the Shigar river merges with the Indus. Turn slightly left and follow the Shigar, then follow it into a long and broad lake-filled valley stretching into north-western direction.  &lt;br /&gt;
&lt;br /&gt;
Towards the end of the lake, a small tributary river, the Braldu, turns eastward out of the main valley. Follow the Braldu and start climbing (if you haven't done so yet). About 15 miles after turning into the Braldu river valley, two glacier-filled valleys stretch to the north - admire the view!&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram2.jpg|300px|thumb|right|Heading back into Skardu, Nanga Parbat on the horizon]]&lt;br /&gt;
&lt;br /&gt;
Passing a few lakes, you reach finally Baltoro glacier continuing the river valley stretching eastward. Ever climbing, follow the glacier till you reach some kind of T-junction. The glacier arm reaching north leads to K2 (which sadly isn't really there in Flightgear), but just ahead of you are the still rather impressive peaks of Gasherbrum V, VI and I - circle the range and make some pictures!&lt;br /&gt;
&lt;br /&gt;
A good way back to Skardu is to go about 10 miles sourth from the Gasherbrum peaks, then head due west.  To your west, you can see the long valleys fall away from the high ranges, to your right is the still glacier-covered high Karakoram. On a clear day (really good visibility selected) you can see the distinctive peak of Nanga Parbat appearing straight ahead on the horizon. The valley of Skardu is quite a distinctive feature and finding back VFR should not be a problem.&lt;br /&gt;
&lt;br /&gt;
Published in [[FlightGear_Newsletter_April_2012#Suggested_flights| Newsletter April 2012]] by [[User:Thosten|Thosten]].&lt;br /&gt;
&lt;br /&gt;
=Africa=&lt;br /&gt;
==Ngorngoro==&lt;br /&gt;
For this [[VFR]] trip we need a strong machine since we will go up from 4000 to about 10,000 feet and since we are in Africa, Tanzania , what better choice is there as the Cessna 208 Caravan, on wheels. We will take off from HTLM, [http://en.wikipedia.org/wiki/Lake_Manyara Lake Manyara], runway 12 (124.5 deg), that has an elevation of 4150 feet. Hit Shift-B so we don't drop off the runway. &lt;br /&gt;
[[File:Map Ngorngoro Crater.jpg|thumb|200px|left|Heightmap with visual reference points]]&lt;br /&gt;
We will have to change some settings before we take off. There is no snow where we are so: View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5000M). We need a reasonable clear sky since there are quite a few bumps we could hit: Environment=&amp;gt; Global weather=&amp;gt; METAR source=&amp;gt; Fair weather.&lt;br /&gt;
&lt;br /&gt;
Give full throttle and take off. Bank left and make a full circle so we gain some altitude and make a mental note of the airstrip, since this is the only one nearby. Look at the road West towards the airfield. &lt;br /&gt;
You will notice that the airstrip is at the edge of a mountain ridge, the lake to the East is quite a lot lower.&lt;br /&gt;
&lt;br /&gt;
We pass over the airstrip towards lake Manyara and turn left keeping the mountains close to our left side, on an initial course of about 30 deg. We keep the mountains to our left and follow our path, our heading will slowly go from 30 to North and takes about 15 mins. During our path we should slowly gain altitude. &lt;br /&gt;
[[File:Ol Doinyo Lengai.jpg|thumb|250px|Mt.Kerimasi (left), Mt.Ol Doinyo Lengai (ahead)]]&lt;br /&gt;
On the '''image''' we see two distinct mountains. The nearest is Mt.Kerimasi, a fun place for hang-gliders, and North Mt.Ol Doinyo Lengai, an active volcano. We are heading straight towards [http://en.wikipedia.org/wiki/Ol_Doinyo_Lengai Mt.Ol Doinyo Lengai]. Just before we would collide we take a sharp left turn heading 225. You will see why we need the altitude now.&lt;br /&gt;
&lt;br /&gt;
The mountain ahead, [http://www.ntz.info/gen/n00161.html#id03702 Mt.Embagai], we see does not appear to be anything spectacular. Aim towards it since we have to go over it. &lt;br /&gt;
Coming nearer, if you are high enough, 9000 feet, you will see why this mountain is well worth a visit. It is a crater with a lake inside, lake Embagai (Empakaai). Enter the crater and look around, careful not to loose any height since we'll have to get out again, we need about 10 000 feet. Mesmerized we grab our compass and take a course of 225 again. To get out we might skim against a cloud, be careful. If you don't see a way out take a turn again to wait for the clouds to move out of sight.&lt;br /&gt;
&lt;br /&gt;
After you managed to get out of the crater keep on the course of 225 while descending slowly for about 9 mins. There are some bumps to avoid, like Mt.Olmoti we keep to the right and Mt.Losirua on the left. &lt;br /&gt;
&lt;br /&gt;
After a small hill we enter one of the most amazing places in Africa, the [http://en.wikipedia.org/wiki/Ngorongoro_Conservation_Area Ngorngoro Crater], the second biggest crater in the world. A micro climate and amazing wildlife.&lt;br /&gt;
Examine the crater and you will notice two lakes, head towards the biggest lake, lake Magadi. When you are above it take a course of 123 to get out of the crater.&lt;br /&gt;
&lt;br /&gt;
After leaving the crater it takes some time before we are near the airstrip again. After about 5 mins we will see a river (left) and a road (right). Follow the road since it will lead us to the airstrip again.&lt;br /&gt;
&lt;br /&gt;
Don't scare the wildebeast!&lt;br /&gt;
&lt;br /&gt;
Notecard:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
#Fair weather, no snow&lt;br /&gt;
#HTLM RW 12 4150 feet&lt;br /&gt;
#Course 30 to 0 deg 15 mins, mountains close left&lt;br /&gt;
#Head towards /\volcano&lt;br /&gt;
#Sharp left turn course 225 deg altitude 9000 feet&lt;br /&gt;
#Volcano, lake, 10 000 feet&lt;br /&gt;
#Course 225 deg, slow descend 9 min&lt;br /&gt;
#Large lake, course 123 deg 5 mins&lt;br /&gt;
#River left, road right. Follow road&lt;br /&gt;
#Landing 124.5 deg 4150 feet.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]]. Published in [[FlightGear_Newsletter_December_2011#Suggested_flights | Newsletter December 2011]].&lt;br /&gt;
==Kisimayu to Kilimanjaro==&lt;br /&gt;
We have to take a big airliner for this trip. The runways are long enough but for this trip we need some altitude and a slow descend.&lt;br /&gt;
&lt;br /&gt;
We park our Big Bird at HCMK, [http://en.wikipedia.org/wiki/Kismayo_Airport Kisimayu], Somalia, near the East coast of Africa. It's unsure what this airfield is used for but it's a long piece of tarmac. I could not find regular flights to and from this airfield, not so strange, there is no lighting, no radio beacons and... no fuel. What you can find is Global Air Rescue that has an air ambulance service based here (with a [http://www.globalairrescue.com/learjet-35.php Learjet 35]).&lt;br /&gt;
&lt;br /&gt;
Our route will be around 425 nm in length. You know your aircraft and know what altitude you will need to fly.&lt;br /&gt;
&lt;br /&gt;
Our destination, HTKJ, [http://en.wikipedia.org/wiki/Kilimanjaro_International_Airport Kilimanjaro], Tanzania, has only one ILS and I have learned, if an airfield has only one ILS there is probably a reason. &lt;br /&gt;
&lt;br /&gt;
Flight Plan (short version):&lt;br /&gt;
#HCMK Kisimayu, length 12,177 ft, no navaids near.&lt;br /&gt;
#GAR Garissa [[VOR-DME]] freq 115.7 heading 268° dist 169 nm.&lt;br /&gt;
#KB Kilimanjaro [[NDB]] freq 393.0 heading 224° dist 258 nm, here is the holding pattern for the Kilimanjaro runway (and there is a [http://en.wikipedia.org/wiki/Mount_Kilimanjaro 19,000 ft] reason for this detour).&lt;br /&gt;
#KV Kilimanjaro VOR-DME freq 115.3 heading 70° dist 26 nm.&lt;br /&gt;
#HTKJ Kilimanjaro [[ILS]] freq 110.9 runway heading 88° elev 2,900 ft [[AMSL]] length 11,807 ft.&lt;br /&gt;
&lt;br /&gt;
Prepare your flight well to receive amazing views of the landscape during the final steps of the route, if you don't you will discover why some pilots call Kilimanjaro Kill-You-Manjaro.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | KCJi_ZaR8ec}}&lt;br /&gt;
Youtube video: Kilimanjaro approach in real, in FG not much different.&lt;br /&gt;
&lt;br /&gt;
*February 2012 by [[User:PH-JBO|PH-JBO]].&lt;br /&gt;
&lt;br /&gt;
=Australia and Oceania=&lt;br /&gt;
&lt;br /&gt;
==Hawai'i==&lt;br /&gt;
[[Image:Maui03.jpg|thumb|250px]]&lt;br /&gt;
Do you use [[TerraSync]]? If so, try a flight around Hawaii! Take off from PHNL in a light aircraft and head west until you hit Pearl Harbor; a right turn north will take you post the USS Arizona Memorial, and the Punchbowl Crater will be to your right. Or, fly east from PHNL past volcanic craters Diamond Head and Koko Head. If you follow the O'ahu coastline north from Koko Head, you can land at either old World War II airbase Bellows Field (now a wildlife reserve in real life) or at Keahole MCAS.&lt;br /&gt;
&lt;br /&gt;
For a potentially more scenic route, fly east toward Molokai, and stay to the north (left) of the island. The northern part of Molokai features huge sea cliffs and a tiny airstrip on the Kalaupapa peninsula - the peninsula being the only respite from the cliffs. A former leper colony existed near the airstrip!&lt;br /&gt;
&lt;br /&gt;
Also of interest are the volcanoes on Maui and the 'Big Island' of Hawai'i - flying VFR in a small plane from PHTO to PHKO over the plateau between Mauna Kea and Mauna Loa can be a challenge, as you have to take off from sea level, fly through a pass of 6500 feet, and then drop back down to sea level to land! The Hana coast of northern Maui is also a nice flight - a circumnavigation of Haleakala, starting and ending at PHOG, is quite a nice flight.&lt;br /&gt;
&lt;br /&gt;
The islands will be available through the download center with the next major scenery release, but for now, fire up [[TerraSync]] and your favorite VFR aircraft and have a blast.&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
== Hawai'i waterfalls tour ==&lt;br /&gt;
This flight will let you discover some of the famous Hawai'ian waterfalls, visiting the Islands of Kauai and Oahu.&lt;br /&gt;
{{note| Despite the scenery is very nice, the waterfalls are mostly not modeled (as of 5/2024)}}&lt;br /&gt;
&lt;br /&gt;
* [https://skyvector.com/?ll=21.82733715471215,-158.96200561400335&amp;amp;chart=301&amp;amp;zoom=5&amp;amp;fpl=%20PHBK%202211N15938W%202206N15930W%202204N15925W%20LIH%202135N15817W%202138N15802W%202120N15746W%202116N15748W%20PHNL SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip except the VORTAC LIH 113.500 to cross the sea.&lt;br /&gt;
* Trip takes around 90 minutes air time at 110 KTAS.&lt;br /&gt;
&lt;br /&gt;
First part of the trip:&lt;br /&gt;
* Start at Parking sands (PHBK), runway 34&lt;br /&gt;
* Takeoff, climb to 5000ft and follow the northern coast at about a heading of 030° until you reach Crawlers Ledge (about 8 minutes flight time).&lt;br /&gt;
* Turn southeast into the very dominant embayment and watch out for Hanakoa Falls, our first waterfall to visit.&lt;br /&gt;
* To your left should be a very dominant valley behind the ridge, featuring a river. Now climb to 6000ft and follow that valley southeastish and visit the famous Weeping wall waterfalls behind the ridge at the end of the valley.&lt;br /&gt;
* Bank left slightly (~100° heading), descend to 3000 ft and aim for Wailua waterfalls at the south side of the small hill near the coast (between the two towns).&lt;br /&gt;
&lt;br /&gt;
This concludes the islands waterfalls after about 20 minutes flight.&lt;br /&gt;
&lt;br /&gt;
Now either land at Lihue Airport (PHLI) to your right for a break, or continue the trip and intercept VORTAC LIH 113.500 radial 99/TO. Follow the radial to cross the Kauai Channel until you reach the tip of Oahu Island (the crossing of 63NM takes about 30 minutes at 120 knots. You may also opt to skip and start at PHDH).&lt;br /&gt;
 &lt;br /&gt;
* Follow overfly Kawaihapai Airfield (PHDH) and follow the northern coast.&lt;br /&gt;
* Shortly you will ovefly a prominent bend from east to nothertheast in the coast, still follow the coast. Note the windfarm appearing to your right ahead.&lt;br /&gt;
* Over Waimea (just before the very visible sand beach), turn right and fly to the inland behind (north of) the windfarm. Shortly after passing the wind turbines, look out for Waimea waterfalls.&lt;br /&gt;
* Follow the mountains to the southeast of the island and slowly climb to 4000ft (the left side is more rough and scenic).&lt;br /&gt;
* North of Diamond Head (a big crater at the south tip of the island) there are several waterfalls (roughly in the middle between Diamond head in the south and Kaneohe in the north), as well as very nice streams coming down the ridge. Also the north side of the ridge is very nice, so consider doing a circle over there.&lt;br /&gt;
* Continue south over Diamond head and proceed to land at Honolulu airport (PHNL).&lt;br /&gt;
&lt;br /&gt;
This concludes the trip after about 1:30 hours.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Brisbane International Airport to Sydney International Airport==&lt;br /&gt;
Going from Brisbane International Airport to Sydney International Airport. You should have a heading of about 203. Might take sometime to arrive to this section. Maybe 10-30 mins into the flight. Can't really say but don't give up, you will eventually reach this section of the flight. '''''Your eyes will be rewarded!''''' .&lt;br /&gt;
&lt;br /&gt;
[[Image:Fgfs-screen-020.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-016.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-012.png|200px]]&lt;br /&gt;
*Published in [[FlightGear Newsletter April 2011]] by [[User:Vin|Vin]]&lt;br /&gt;
&lt;br /&gt;
=Antarctica=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Suggested}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139885</id>
		<title>Suggested Flights</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139885"/>
		<updated>2024-05-29T06:34:53Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Austrian alps soaring */ - no subsystem needed since years&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;!-- if you add new flights to this page it would be cool to include your name and month of writing. Also include the newsletter month and year if the flight has been published in one. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ------------------------------------------------- --&amp;gt;&lt;br /&gt;
[[FlightGear]] has accurate and realistic terrain. Here are some interesting places where you can do virtual sight seeing.&lt;br /&gt;
&lt;br /&gt;
If you are starting with [[FGRun]] - the FlightGear launcher - you can enter the [[airport]] id and select the runway on the appropriate screen in the startup wizard.&lt;br /&gt;
If you are starting from the command line you can use the options: &amp;lt;tt&amp;gt;--airport=ABCD&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;--runway=12L&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Remember to give a look at the [[Suggested Airports]] page, where you can find a comprehensive list of high quality airports in FlightGear.&lt;br /&gt;
*If you enjoy these flights, please consider recording a flight and posting a link to it at the [[Suggested Prerecorded Flights]] page.&lt;br /&gt;
&lt;br /&gt;
'''Remove before flight!''' &amp;lt;!-- No comprendo? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before you start flying into one of the suggested flights, you should add both the terrain and the Objects to you FlightGear installation; This is well explained on the [[Howto: Install scenery|installing scenery]] page.&lt;br /&gt;
&lt;br /&gt;
p.s. charts are generated using FlightGear data only.&lt;br /&gt;
&lt;br /&gt;
This page includes the flights described on the [http://www.flightgear.org/places.html main website] and the suggested flights from the newsletters. It can serve as an archive for suggested flights from future [[FlightGear Newsletter|newsletters]] or can give a flight if creativity is low that month. &lt;br /&gt;
&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
&lt;br /&gt;
=Cross Continentals or World Tour=&lt;br /&gt;
&lt;br /&gt;
* [[Breitling DC-3 World Tour]][[File:Rect17.png|thumbnail]]&lt;br /&gt;
* [[Flying the Hump]]&lt;br /&gt;
&lt;br /&gt;
=North America=&lt;br /&gt;
==Round Valley Airport==&lt;br /&gt;
[[Image:O09-002.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:O09-003.png|thumb|right|Valley]]&lt;br /&gt;
Covalis, CA. The airport is at the West edge of a 7 mile across valley.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The predominant wind is a cross wind. Take-offs to the west (if they use the full runway length) often have to fly between 2 small hills and over another valley while gaining altitude. Most pilots take off to the west.&amp;lt;BR/&amp;gt;&lt;br /&gt;
It is a paved runway and quite long. It was designated as an emergency recovery field during the Cold War and was used twice that I know of by military aircraft that could not take off again from the field. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
{{Location map | USA&lt;br /&gt;
| caption = Latitude: 39.790156 Longitude: -123.266403&lt;br /&gt;
| lat_deg = 39.790156&lt;br /&gt;
| lon_deg = -123.266403&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* [[O09|O09 - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/O09.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
I have tried this trip using a p38, quite powerful airplane&lt;br /&gt;
* [[Lockheed-P38|P38]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=O09 --runway=28 --aircraft=p38&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Half Moon Bay==&lt;br /&gt;
[[Image:KHAF-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:KHAF-002.png|thumb|right|Bridge]]&lt;br /&gt;
Start at [[KHAF|Half Moon Bay]], Runway 30, with 32km visibility; Takeoff in the C172 and climb to 1000 feet, then continue north over the water, near the shoreline. Look out the right window frequently. Fly up the coast, overfly the Golden Gate Bridge, continue around the top of the peninsula past downtown SF, then fly on to [[KSFO]] for a landing. We now have lots to see.&lt;br /&gt;
&lt;br /&gt;
If you cannot see the runway in the default 172, you must be flying too high or too slowly. You can start by practicing a bit with a good setup:&lt;br /&gt;
&lt;br /&gt;
'''fgfs --offset-distance=1.5 --altitude=500 --vc=70'''&lt;br /&gt;
&lt;br /&gt;
As soon as FlightGear starts, cut the power to 1500 rpm and drop two notches of flap. Maintain 70 kt. Now, pick your landing spot (a bit down the runway) and try to hold it in the same spot on your windshield. If your landing spot starts moving down, you are too high, and should cut another 100 rpm; if it starts moving up, you are too low, and should add another 100 rpm. Adjust the nose to keep your speed at 70 kt all the way down until you're right above the numbers, then cut power to idle, drop the last notch of flaps, flare, and land.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KHAF-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:World-KHAF.png|thumb|right|Latitude: 37.513333 Longitude: -122.501111]]&lt;br /&gt;
* [[KHAF|KHAF - Half Moon Bay]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KHAF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
no required scenery tile.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSFO-001.png|thumb|left|Before landing]]&lt;br /&gt;
Use the default c172 airplane &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KHAF --runway=30 --visibility=32000 --aircraft=c172&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
April 2006 [[User:Hellosimon|Hellosimon]], format and extended by [[User:Francescobrisa|Francescobrisa]]&lt;br /&gt;
&lt;br /&gt;
==Hell's Canyon==&lt;br /&gt;
[[Image:25U-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:25U-004.png|thumb|right|Valley]]&lt;br /&gt;
Hell's Canyon, Imnaha, OR. This airport is located just west of &amp;quot;Hell's Canyon National Park&amp;quot; which has the Snake River running through it.&amp;lt;br/&amp;gt;&lt;br /&gt;
Supposedly it's a 5500 foot drop from the top of the canyon to the river.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The airport is located on the brink of this canyon.&lt;br /&gt;
&lt;br /&gt;
See the remarks on the airport page (click on the airport id) ... DOWNDRAFTS, SHEER DROP IN TERRAIN, LIVESTOCK, etc. Don't go here on your first solo x-country. :-) &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:25U-005.png|thumb|left|Landing]]&lt;br /&gt;
[[Image:World-25U.png|thumb|right|Latitude: 45.427861 Longitude: -116.693889]]&lt;br /&gt;
* [[25U|25U - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/25U.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:25U-006.png|thumb|left|Landing 2]]&lt;br /&gt;
I have tried this trip using a pilatus PC-9M, powerful airplane&lt;br /&gt;
* [[PC-9M|PC-9M]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=25U --aircraft=PC-9M&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crater Lake National Park Tour==&lt;br /&gt;
[[Image:64s-003.png|thumb|left|Approaching the lake]]&lt;br /&gt;
[[Image:64s-002.png|thumb|right|Direction 40 degrees]]&lt;br /&gt;
Prospect, OR.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take off and fly at a heading of about 40 degrees until you cross the first distinct ridge in front of you. (several minutes of flight in the navion ... just climb as fast as you can, it will be a close squeek to get over :-)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you clear the ridge and can see beyond it, turn right and fly a heading of about 70 degrees. You should see two shallow peaks off in the distance. Head right between these -- they are the two sides of the crater. As you get closer the shape of the crater will come into view. There's a lake there in real life, hopefully it will be there in flight gear too before long.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:64s-001.png|thumb|left|Leaving the 64S airfield]]&lt;br /&gt;
[[Image:World-64S.png|thumb|right|Latitude: 42.743183 Longitude: -122.488092]]&lt;br /&gt;
* [[64S|64S - Prospect State]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/64S.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:64s-004.png|thumb|left|Lake view 1]]&lt;br /&gt;
[[Image:64s-005.png|thumb|right|Lake view 2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ryan_Navion|Navion]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=64S --runway=02 --aircraft=navion &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Grand Canyon Tour==&lt;br /&gt;
[[Image:Grand_Canyon_Tour_4.jpg|700px|frameless|center]]&lt;br /&gt;
Being a special place, there are also special flight rules for VFR traffic around the Grand Canyon. There are multiple no-fly-zones set up and VFR traffic is only allowed to fly via the designated corridors. If you want to fly realistically, avoid these zones in FlightGear as well, following for example the [https://skyvector.com/?ll=36.18649251415492,-112.52223157994264&amp;amp;chart=230&amp;amp;zoom=5&amp;amp;fpl=%20KGCN%20VPGCF%20VPGCG%20VPGCD%20VPGCC%20VPGCA%203608N11252W%203609N11309W%201Z1%201G4%203AZ5 route shown here. (skyvector link)]&lt;br /&gt;
&lt;br /&gt;
This flight takes you from KGCN, the Grand Canyon National Park airport, to 3AZ5, a small airfield called Hualapai located south of the Grand Canyon. Departing from KGCN, fly north-west bound to reach the canyon. From there, either follow the route shown on skyvector above, or fly visually through the canyon westbound towards 1Z1, Grand Canyon Bar Ten Airstrip. From there on, continue flying westward to 1G4. Called Grand Canyon West, 1G4 also marks about the western end of the canyon. To get to your destination 3AZ5, continue along the southern rim, flying eastward now. Shortly after leaving the breathtaking valley behind you, you will already reach your destination. Land and let your engine and your mind cool down from the special views :)&lt;br /&gt;
&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Grand_Canyon_Tour_2.jpg&lt;br /&gt;
Grand_Canyon_Tour_3.jpg&lt;br /&gt;
Grand_Canyon_Tour_1.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports===&lt;br /&gt;
* KGCN - Grand Canyon National Park Airport - [https://www.aopa.org/destinations/airports/KGCN/details aopa.org]&lt;br /&gt;
* 1Z1 - Grand Canyon Bar Ten Airstrip - [https://www.airnav.com/airport/1Z1 airnav.com]&lt;br /&gt;
* 1G4 - Grand Canyon West - [https://www.airnav.com/airport/1G4 airnav.com]&lt;br /&gt;
* 3AZ5 - Hualapai - [https://www.airnav.com/airport/3AZ5 airnav.com]&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
Most VFR aircraft with sufficiently big windows will serve the purpose, for example:&lt;br /&gt;
*[[Cessna C172P]]&lt;br /&gt;
*[[Optica]]&lt;br /&gt;
*[[Ryan_Navion]]&lt;br /&gt;
If you are more interested in flying helicopters, the [[Eurocopter EC130 B4]] with the Grand Canyon Helicopters livery might be for you.&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
*[https://www.nps.gov/grca/learn/nature/upload/sfra.pdf Chart of the Grand Canyon special airspace, published by the National Park Service]&lt;br /&gt;
*[http://www.swaviator.com/html/issueJJ99/canyon.html An article about flying close to the Grand Canyon]&lt;br /&gt;
*[https://www.aopa.org/news-and-media/all-news/2017/april/flight-training-magazine/road-trip-grand-canyon AOPA Flight suggestion]&lt;br /&gt;
&lt;br /&gt;
==Ranger Creek Airport==&lt;br /&gt;
[[File:21w-1.jpg|500px|center|Waiting for departure at Ranger Creek]]&lt;br /&gt;
Ranger Creek Airport is located in Greenwater, Washington, USA. Being wedged into the bottom of a steep canyon, you'll definitely need to be on your toes to get in and out of there. Switch on Advanced Weather and Live Data to experience what the winds can do to you in real life!&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
* [[21W|21W - Ranger Creek]] - [http://www.airnav.com/airport/21W airnav.com]&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Ranger_Creek1.jpg|Departing between the mountains&lt;br /&gt;
Ranger_Creek_2.jpg|Looking back towards the airfield&lt;br /&gt;
Ranger_Creek_3.jpg|Downwind for approach back to Ranger Creek&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
For this flight, the Piper PA-18 SuperCub is suggested, this is included in the [[Piper J3 Cub]] package&lt;br /&gt;
&lt;br /&gt;
==Mount Rainier Tour==&lt;br /&gt;
[[Image:WA20-002.png|thumb|left|The mountain from far away]]&lt;br /&gt;
[[Image:WA20-006.png|thumb|right|external view]]&lt;br /&gt;
Eatonville, WA. Start out at Swanson Airport in Eatonville, WA. Take off and fly a heading of about 90 degrees. You will need to fly for 5-10 minutes before the mountain comes into view. Be patient if you don't see it right away, it will dwarf everything in it's vicinity. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-WA20.png|thumb|right|Latitude: 46.87588502 Longitude: -122.25733500]]&lt;br /&gt;
&lt;br /&gt;
* [[WA20|WA20 - Swanson]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/WA20.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:WA20-007.png|thumb|left|external near view]] &lt;br /&gt;
[[Image:WA20-009.png|thumb|right|external near view]] &lt;br /&gt;
* [[mosquito]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=WA20 --aircraft=mosquito&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Death Valley Tour==&lt;br /&gt;
[[Image:L06-001.png|thumb|left|in the air]]&lt;br /&gt;
[[Image:Furnace-creek.jpg|thumb|left|real life view of Furnace Creek Airfield]]&lt;br /&gt;
[[Image:L06-002.png|thumb|right|in the air]] &lt;br /&gt;
Furnace Creek, CA. This starts you right in the middle of Death Valley which runs north &amp;amp; south. If you head south about 15 miles you'll hit the lowest point in the USA, 282 feet (86 meters) below sea level.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-L06.png|thumb|right|Latitude: 36.46451100 Longitude: -116.88139422]]&lt;br /&gt;
* [[L06|L06 - Furnace Creek]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/L06.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:L06-003.png|thumb|left|in the air]] &lt;br /&gt;
[[Image:L06-004.png|thumb|right|in the air]] &lt;br /&gt;
* [[rallye-MS893]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=L06 --aircraft=rallye-MS893&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utah==&lt;br /&gt;
!!! Work in progress !!!&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Image:6WA8-002.png|thumb|left|landing 1]]&lt;br /&gt;
[[Image:6WA8-008.png|thumb|right|landing 2]] &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Escalante Muni Airport, Escalante, UT. This airport is east and a bit north of Bryce Canyon National park. If you head mostly south and a bit east you'll eventually hit the Grand Canyon. It is sandwiched between the Dixie National forest to the north and the Grand Staircase-Escalante National Monument to the south. There should be interesting stuff to see no matter which direction you head.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-1L7.png|thumb|right|Latitude: 37.75054400 Longitude: -111.57578300]]&lt;br /&gt;
* [[1L7|1L7 - Escalante Muni]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/1L7.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
	[[Image:6WA8-009.png|thumb|left|landing 3]] &lt;br /&gt;
* [[Piper PA-18 Super Cub|pa 18]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=1L7 --aircraft=pa18&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lake County Airport (CO)==&lt;br /&gt;
[[Image:KLXV-001.png|thumb|left|Adjust mixture !]]&lt;br /&gt;
[[Image:KLXV-002.png|thumb|right|The terrain will be covered by snow]] &lt;br /&gt;
Lake County Airport, Leadville, CO. This airport is at an elevation of 9927 making it a bit of a challenge to get into and out of with a standard C172.&amp;lt;BR/&amp;gt;&lt;br /&gt;
Make sure you lean out your engine before taking off and read up on density altitude before you try this one in real life. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KLXV-003.png|thumb|left|The airport]]&lt;br /&gt;
[[Image:World-KLXV.png|thumb|right|Latitude: 39.22812500 Longitude: -106.31835600]]&lt;br /&gt;
* [[KLXV|KLXV - Lake Co]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KLXV.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w110n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KLXV-004.png|thumb|left|I like this panorama]] &lt;br /&gt;
[[Image:KLXV-005.png|thumb|right|The nearby lake]] &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
[[Image:KLXV-006.png|thumb|left|Landing...]] &lt;br /&gt;
 fgfs --airport=KLXV --aircraft=c172p&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caribbean - Saint Martin and St. Kitts== &lt;br /&gt;
[[Image:TNCM-003.png|thumb|left|just after the take off]]&lt;br /&gt;
[[Image:TNCM-004.png|thumb|right|some nearby island]] &lt;br /&gt;
Pilots of the Caribbeans is an informal FlightGear community of users who fly around the small Caribbean islands, many of which have custom scenery and improved landclass data. (For details see [[Pilots of the Caribbean]])&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[TNCM|Princess Juliana International Airport (TNCM)]] at the isle of Saint Martin, is one of the most popular airports in FlightGear. In large part due to the custom objects and land cover. However, St. Marten is only one of several detailed airports in the region - and, while the approach for TNCM is one of the most memorable in the whole world, the land cover for St. Kitts and Nevis makes it a lovely place to fly.&lt;br /&gt;
&lt;br /&gt;
British Airways, US Airways and American Airlines, among others, all fly into St. Kitts' [[TKPK|Robert L. Bradshaw International Airport (TKPK)]] in real life.&lt;br /&gt;
&lt;br /&gt;
Take off from TKPK in a [[Piper_J3_Cub|Piper Cub]] and make a northward, clockwise circle of the island. Start your descent on the east side of the island, and focus on the small hill which separates the north from the south. Start hugging the coast near the beach and look to the west - as soon as the railroad heads to the southwest, you're about ready to turn for final. Make your right hand turn for final and taxi to the terminal.&lt;br /&gt;
&lt;br /&gt;
If you want to fully explore this whole country, take off in a Beaver, which has a little more speed, and fly a figure eight. Take off from TKPK and circle the airport to the north like in the Cub. Then instead of landing, perform a touch-and-go and turn left over the boat terminal and make for the west coast of Nevis. Enjoy the beauty of the south coast of St. Kitts before circling Nevis. Over Nevis, you have several options - cut your flight short and land at [[TKPN]] on the island of Nevis, complete the &amp;quot;figure eight&amp;quot; by heading back to TKPK, or check your fuel and head east across the Caribbean to Antigua (which does not have custom land cover).&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
Check out the [[Pilots of the Caribbean]] page, for further informations.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-TNCM.png|thumb|right|Latitude: 18.040953 Longitude: -63.108900]]&lt;br /&gt;
&lt;br /&gt;
* [[TNCM|TNCM - Princess Juliana International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TNCM.pdf chart] &lt;br /&gt;
* [[TKPK|TKPK - Robert L. Bradshaw International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPK.pdf chart] &lt;br /&gt;
* [[TKPN|TKPN - Vance Winkworth Amory Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPN.pdf chart] &lt;br /&gt;
others interesting airports in the area:&lt;br /&gt;
* [[TFFF|TFFF - Le Lamentin]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFF.pdf chart]&lt;br /&gt;
* [[MDPP|MDPP - Gregorio Luperon Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/MDPP.pdf chart]&lt;br /&gt;
* [[TJSJ|TJSJ - Luis Munoz Marin Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TJSJ.pdf chart]&lt;br /&gt;
* [[FMEE|FMEE - St Denis Gillot]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/FMEE.pdf chart]&lt;br /&gt;
* [[TFFG|TFFG - Grand Case]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFG.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: &lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w070n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n20.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w090n20.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:TNCM-005.png|thumb|left|amazing]]&lt;br /&gt;
[[Image:TNCM-006.png|thumb|right|landing]] &lt;br /&gt;
* [[Piper_J3_Cub|Piper Cub]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=TKPK --aircraft=Cub&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
[[FlightGear Newsletter January 2011]] by [[User:Statto|Statto]], format and extended by [[User:Francescobrisa|Francescobrisa]].&lt;br /&gt;
&lt;br /&gt;
==Friedman Memorial Airport (Idaho)==&lt;br /&gt;
[[Image:KSUN-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:KSUN-002.png|thumb|right|nearby]] &lt;br /&gt;
Friedman Memorial Airport, Hailey, Idaho. This airport is nestled in a valley surrounded by significant terrain. It's one that shows up quite often in accident investigations. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KSUN.png|thumb|right|Latitude: 43.51223900 Longitude: -114.30376100]]&lt;br /&gt;
* [[KSUN|KSUN - Friedman Mem]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KSUN.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSUN-003.png|thumb|left|landing]]&lt;br /&gt;
[[Image:KSUN-004.png|thumb|right|landing]] &lt;br /&gt;
* [[FK9MK2]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KSUN --aircraft=fk9mk2&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wyoming - Grand Teton ==&lt;br /&gt;
Jackson Hole (KJAC) airport is located at around 6,400ft right next to the Teton range of mountains. The Tetons rise straight out of the plains, gaining over 5,000ft in 2 miles. &lt;br /&gt;
&lt;br /&gt;
You will need the w120n40 scenery.&lt;br /&gt;
&lt;br /&gt;
Tower frequency at KJAC is 118.07. Due to the high altitude, you will need to lean non-turbocharged piston aircraft before take-off. Don't forget that take-off distances will also be longer.&lt;br /&gt;
&lt;br /&gt;
After take-off head to the North East. Grand Teton is the highest of the three peaks that rise straight from the flat-lands. Follow the line of mountains to the East, passing over Jenny Lake. After a couple of miles you will reach a huge lake. The large bulk of a mountain to the East is Mount Moran.&lt;br /&gt;
&lt;br /&gt;
The Teton Mountain range is surprisingly thin - really just a string of mountains running SW-NE. Flying fast jets down the steep valleys is recommended.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
== Virginia Eastern Shore, Chesapeake Bay-Bridge Tunnel Sightseeing ==&lt;br /&gt;
[[Image:KTGI-001.png|thumb|left|before take off]]&lt;br /&gt;
[[Image:KTGI-002.png|thumb|right|right after take off]]&lt;br /&gt;
&lt;br /&gt;
Take a short VFR trip from Tangier Island to view the famous Chesapeake Bay Bridge-Tunnel connecting Cape Charles to Cape Henry. Depart historic Tangier Island (KTGI) situated in the Chesapeake Bay and land at Norfolk International Airport (KORF), Norfolk, Virginia. The scenic character of the flight is enhanced by leaving the island at dusk. The flight is both scenic and challenging. Frequently, when flying with real weather, you will have a steady wind blowing across the bay. Starting out quiet Tangier and arriving at busy, glittering Norfolk International (KORF) gives the flight some contrast.&lt;br /&gt;
&lt;br /&gt;
'''fgfs --airport=KTGI --runway=20 --timeofday=dusk'''&lt;br /&gt;
&lt;br /&gt;
Before leaving Tangier: Set your altimeter to the prevailing barometric temperature. Set your communications radio to the Norfolk Intl. (KORF) ATIS frequency of 127.150 MHz to listen for weather reports in the destination area. Set your navigation radio to 112.20 MHz to pick up the Cape Charles (CCV) VOR. Set your heading bug to the runway heading, 200.&lt;br /&gt;
&lt;br /&gt;
Takeoff straight, flying the runway heading. Climb to 2000ft and maintain.&lt;br /&gt;
&lt;br /&gt;
Shortly, you should see the VOR assigned to NAV1 display receive a steady signal (the OFF flag will disappear). The DME should also settle down and display the distance to the Cape Charles VOR station. The flight to CCV will be about 26 nautical miles. As you fly, it will show your airspeed and time to arrival. It should take about ten minutes.&lt;br /&gt;
&lt;br /&gt;
Turn the OBS knob until the VOR displays the TO flag and 190 degrees, the heading you should now turn to.&lt;br /&gt;
&lt;br /&gt;
Fly south from Tangier, crossing an expanse of water, about ten miles until you see the Virginia Eastern Shore. You'll come upon the grass airstrip of Chance (VA89) a few minutes out from Tangier. Beyond are two flashing tower beacons. You may catch a glimpse of Weirwood/Kellam (W08) on the ocean shore, recognizable by two crossing dirt strips.&lt;br /&gt;
&lt;br /&gt;
If you look carefully, you may see the little white building that is the Cape Charles VOR station. As you fly over VOR the flag will change from TO to FROM and the needle will deflect. Do not try to follow the needle. Wait until you are past the VOR. As you cross the VOR station, you should see a highway slanting across your path toward the south west. Turn to follow this highway. You'll come across a lone tower with beacon along the roadside. You'll see an access road stretching from the tower complex to the main road.&lt;br /&gt;
&lt;br /&gt;
If the sky conditions permit, you may try your hand at wayfinding by following the road. If visiblity is poor, set the VOR to 180 degrees to parallel the road to the end of the peninsula. Or you can continue to fly outbound from the VOR on 190 by maintaining the same heading. The VOR needle should return to center with the FROM flag displaying. This will put you west of the bridge with a good view and the option to turn towards KORF near the initial approach fix. If you follow the highway you will need to overfly the airport, but if you stay on the 190 heading, you will be in a position to make a straight in landing.&lt;br /&gt;
&lt;br /&gt;
As you fly down the peninsula you'll pass Cherrystone, Eagle's Nest, Scott and Bull Farm grass airstrips. Bull Farm is the last strip before the mouth of the Chesapeake. Just past Scott Farm you should see the first glimmer of the northern leg of the bridge. The grass strips can be very difficult to see.&lt;br /&gt;
&lt;br /&gt;
As you reach the end of the peninsula, be careful to avoid the tower on Fisherman's Island at the north end of the north leg of the bridge (Note the bridge is not modeled by FlightGear...but I hope to work up one eventually). Next comes the north middle leg. Turn right a few degrees to follow the south middle leg. Watch as the deck plunges beneath the waves to allow ships to navigate the north and south channels.&lt;br /&gt;
&lt;br /&gt;
As Cape Henry approaches, you'll see the Norfolk International airport to the right and the southern leg of the bridge touching the shore.&lt;br /&gt;
&lt;br /&gt;
If you intend to land at KORF, you will want to start your approach soon. Otherwise, you may continue to follow the bridge to the end. Make the approach to KORF by contacting the tower for vectors. Or use the ILS.&lt;br /&gt;
&lt;br /&gt;
This is a good flight to practice VOR flying on. It is a very straight flight path to the VOR requiring little adjustment and there are no other VORs in the area to confuse you.&lt;br /&gt;
*June 2006 by [[User:Sek|Sek]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KTGI.png|thumb|right|Latitude: 37.8250835 Longitude: -75.9976665]]&lt;br /&gt;
* [[KTGI|KTGI - Tangier Island]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KTGI.pdf chart]&lt;br /&gt;
* [[KORF|KORF - Norfolk International]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KORF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w80n30.tgz&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KTGI-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:KORF-001.png|thumb|right|landing to KORF]]&lt;br /&gt;
I have tried this trip using a Seneca II&lt;br /&gt;
* [[Piper PA34-200T Seneca II]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KTGI --runway=20 --timeofday=dusk  --aircraft=SenecaII&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prince George to Calgary Springbank==&lt;br /&gt;
A beautiful flight is from Prince George (CYXS), to Calgary Springbank (CYBW). Route created by reed, which can be seen at {{forum link|t=9772|text=the forums}}&lt;br /&gt;
*Published in [[FlightGear Newsletter November 2010]] By [[User:Cael|Cael]].&lt;br /&gt;
==Ketchikan to Juneau==&lt;br /&gt;
It's cold where we will go so dress up warm and if we are lucky we might see whales during our flight. Don't fly too high to enjoy the amazing views, and there is a small challenge at the end. The runways we will use are long enough for bigger aircraft (7000+). Total length of the trip will be around 245 NM. So, hop in the cockpit of your favourite airliner.&lt;br /&gt;
&lt;br /&gt;
Alaska, here we come! Enjoy!&lt;br /&gt;
#Park your aircraft on PAKT, [http://www.borough.ketchikan.ak.us/airport/airport_history.htm Ketchikan International], runway 11. The wind is coming from '''South''', change the weather if needed (SE is ok too). &lt;br /&gt;
#Fly North towards [[NDB]] Fredericks Point on 372.0 for 94 NM. &lt;br /&gt;
#Fly towards [[NDB]] Five Fingers on 295.0 for 39 NM. &lt;br /&gt;
#Fly towards [[NDB]] Gustavus on 219.0 for 77 NM. &lt;br /&gt;
#Fly towards [[NDB]] Coghlan Island on 212.0 for 32 NM.&lt;br /&gt;
#Set the [[ILS]] on 109.9 and land your aircraft (after 4 NM) on PAJN, [http://www.juneau.org/airport/ Juneau International], runway 08.&lt;br /&gt;
If you feel warm after this landing, you just crossed a NORAD microwave site, so that is why.&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]] [[FlightGear Newsletter November 2011]]&lt;br /&gt;
==Searching Wizard Island==&lt;br /&gt;
*USA, Oregon, Klamath County&lt;br /&gt;
With one [[VORTAC]] behind our back we do an [[IFR]]/[[VFR]] search of Wizard Island, a mysterious place, a sacred place for native Americans. You might even find the &amp;lt;tt&amp;gt;Old Man of the Lake&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Don't pull up the map, that would spoil the surprise but I promise '''unique views'''. We will land on a short lawn runway. Terrain [[altitude]] will range from 4,000 to a max of 8,930 feet and down again. Total length of the trip will be about 50 NM. Select your aircraft with care. It must have one working navigational radio (VOR-DME), a strong engine, a strong undercarriage, must be capable of a good climb and a steep descend. I suggest to use Fair weather (Environment=&amp;gt;Global Weather). If needed remove some clouds (View=&amp;gt;Rendering Options=&amp;gt;Slider 3d Clouds to the left).&lt;br /&gt;
[[File:Mount Scott.jpg|thumb|250 px|Mount Scott (8,929 feet) just after depart from 2S7 (Two Sierra Seven). Wizard Island is just to the North-West of it.]]&lt;br /&gt;
*Park your aircraft on 2S7 (Two Sierra Seven), Chiloguin-State.&lt;br /&gt;
*Set [[NAV1]] on 115.9 (Klamath Falls VORTAC) and on radial 323&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magnetic). We are at an [[elevation]] of 4,217 feet. Set QNH. Set heading bug at 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn).&lt;br /&gt;
*Take off an fly the course set with the heading bug.&lt;br /&gt;
*Intercept the radial.&lt;br /&gt;
*Monitor distance and you will find Wizard Island at 50 NM from Klamath Falls. The island has an elevation of 6,673 feet. I suggest a full 360&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; turn, take pictures.&lt;br /&gt;
*Set radial 318&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt;, keep the same frequency. Do a new radial intercept.&lt;br /&gt;
*Try and find the airstrip (3S6, Three Sierra Six, Toketee-State) at 71 NM from Klamath Falls with an elevation of 3,361 feet, runway heading 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn). There are bumps around you should avoid.&lt;br /&gt;
*If you are capable of finding the island, finding the airstrip and landing without a crash, in one go..., you are a wizard.&lt;br /&gt;
&lt;br /&gt;
Click [http://en.wikipedia.org/wiki/Crater_Lake this link] '''after''' you have landed so you know what amazing landscape you have seen.&lt;br /&gt;
&lt;br /&gt;
*December 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter March 2012]].&lt;br /&gt;
&lt;br /&gt;
=South America=&lt;br /&gt;
==Southern Tip of Chile==&lt;br /&gt;
[[Image:Scgz-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:Scgz-004.png|thumb|right|Some part of the scenery]]&lt;br /&gt;
Gary Carvell: Here is a suggestion for the FlightGear Places to Fly page. I don't have any particular routes, just fly around and enjoy the gorgeous scenery.&amp;lt;BR/&amp;gt;&lt;br /&gt;
These three airports are in the same region of the very southern tip of Argentina. This area is a scenic wonderland - a maze of islands, mountains, and ocean channels. Hours of entertainment.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SCGZ - Puerto Williams Guardiamarina Zanartu Airport, Chile Located on the north coast of Isla Navarino facing the Beagle Channel. At 55 deg S. longitude, Puerto Williams is considered the southernmost town in the world.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SAWH - Ushuaia Islas Malvinas Airport&lt;br /&gt;
SAWO - Ushuaia Est Aeronaval Airport&lt;br /&gt;
Ushuaia, on the south coast of Isla Grande de Tierra del Fuego, on the the Beagle Channel.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:Sawh-004.png|thumb|left|Approaching Ushumaia Malvinas Argentinas]]&lt;br /&gt;
[[Image:World-scgz.png|thumb|right|Latitude: -54.931072 Longitude: -67.626261]]&lt;br /&gt;
&lt;br /&gt;
* [[SCGZ|SCGZ - Guardiamarina Zanartu]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SCGZ.pdf chart]&lt;br /&gt;
* [[SAWH|SAWH - Ushuaia Malvinas Argentinas]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWH.pdf chart]&lt;br /&gt;
* [[SAWO|SAWO - Ushuaia Est Aeronaval]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWO.pdf chart]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:Scgz-002.png|thumb|left|Just left the scgz airport]]&lt;br /&gt;
I personally like to fly this area in the [[Consolidated_Aircraft_PBY_Catalina|Catalina]], it's a great sightseeing plane with the advantage that you can take off and land just about anywhere. &lt;br /&gt;
* [[Consolidated_Aircraft_PBY_Catalina|Catalina]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SCGZ --aircraft=Catalina&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Copacabana to San Rafael over Lake Titicaca==&lt;br /&gt;
Bolivia to Peru. This trip will lead you over one of the highest and deepest lakes in the world towards the highest airfield in the world. It a demonstration of a [[IFR]] flight towards a fix and a demonstration how accurate FlightGear simulates air density and the effects it has on aircraft.&lt;br /&gt;
[[File:Slcc-sprf.jpg|thumb|200px|left|Flight and fix SLCC to SPRF]]&lt;br /&gt;
Place your aircraft on the airfield [http://en.wikipedia.org/wiki/Copacabana,_Bolivia SLCC, Copacabana], with an [[elevation]] of 12,592 feet. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M). &lt;br /&gt;
&lt;br /&gt;
We will fly towards and land at SPRF. If you would enter SLCC and SPRF in [[Kelpie]] planner you probably would not be able to find SPRF. To find SPRF I am adding an additional VOR-DME station and for a good fix give you another VOR-DME. Try Kelpie planner to plan this route and compare with this suggestion.&lt;br /&gt;
&lt;br /&gt;
Equipment preparation. Set [[NAV1]] to [http://en.wikipedia.org/wiki/Juliaca Juliaca] VOR-DME on 155.55 with a radial of 311° (magnetic). Set [[NAV2]] to Arequipa VOR-DME on 113.7 with a radial of 212°. During our flight we will fly with [[true altitude]] as set with [[QNH]], keep QNH updated. Arm the autopilot with the [[heading bug]] at 311° and an initial altitude of 13,500 feet.&lt;br /&gt;
&lt;br /&gt;
Take off and if you took the wrong RW pull up hard. Take a small tour over [http://en.wikipedia.org/wiki/Titicaca lake Titicaca], see the floating islands and try to find the lost golden treasure. Intercept the nearest radial on NAV1 towards Juliaca (about 311°). &lt;br /&gt;
&lt;br /&gt;
Just before Juliaca is a hill so while on lake Titicaca increase altitude to 14,200 feet, the [[VFR]] part of this trip is over. After passing Juliaca set the radial of NAV1 to 352° and set the altitude to 17,422 feet. We will fly from NAV1 and slowly increase altitude.&lt;br /&gt;
&lt;br /&gt;
At a distance of about 60 NM set the heading bug on the current course. Monitor the distance to NAV1, the radial of NAV2 and the distance to NAV2. At a distance of 74.5 NM to NAV1, a distance of 140.7 NM and at the '''radial''' intercept of NAV2 should be the runway. So, from 60 NM onwards, look outside the window, then at NAV1 and then NAV2 etc.&lt;br /&gt;
&lt;br /&gt;
If you are at 80NM to NAV1 you have missed the airfield but you still won't hit any hills (unless you bank left). Bank right and set the heading bug to 172°. Fly back towards NAV1 and intercept the radial 352° at about 50NM again to repeat the search.&lt;br /&gt;
&lt;br /&gt;
The runway SPRF, San Rafael, has a elevation of 14,422 feet and a heading of 297°/ 117°. Our initial altitude has been set 3,000NM above the RW elevation. That should give sufficient room for navigation.&lt;br /&gt;
&lt;br /&gt;
After you have seen the airfield set the radial of NAV1 to 297°, the heading of the runway (not the course to the runway) as a visual aid. Land on RW 30 (and not on RW 12 unless you are a show-off). Oh, there is a small hill in front of RW 30, just so you know.&lt;br /&gt;
&lt;br /&gt;
Decreasing speed at this altitude can be a bit tricky. The air is thin and does not give much resistance. Next to that, the difference between [[indicated airspeed]] and [[ground speed]] is very noticeable. The ground speed is much higher as the indicated airspeed.&lt;br /&gt;
&lt;br /&gt;
After a successful landing, try to discover the origin of the Amazon river since we are now at the starting point of that trip.&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]], published in [[FlightGear_Newsletter_February_2012#Suggested_flights| Newsletter February 2012]].&lt;br /&gt;
&lt;br /&gt;
==Origin of the Amazon River==&lt;br /&gt;
[[Image:SPRF-001.png|thumb|left|high altitude]]&lt;br /&gt;
[[Image:SPRF-002.png|thumb|right|high altitude]] &lt;br /&gt;
Peru. For this [[IFR]] tour (with [[VFR]] parts) we take off from the highest airfield in the world to discover the origin of the [http://en.wikipedia.org/wiki/Amazon_River Amazon river] in South America. I promise spectacular mountains and valleys. The total length of this trip is about 175 NM.&lt;br /&gt;
&lt;br /&gt;
Place your aircraft on the airfield SPRF, San Rafael. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M).&lt;br /&gt;
&lt;br /&gt;
Equipment preparation: Set [[NAV1]] to [http://en.wikipedia.org/wiki/Arequipa Arequipa] VOR-DME at 113.7 with a radial of 176° (magnetic). Set [[NAV2]] to [http://en.wikipedia.org/wiki/Cusco Cusco] VOR-DME at 114.9 also with a radial of 176°.&lt;br /&gt;
Set [[QNH]] and during flight keep correcting it, it's a bad idea to use [[Pressure altitude]] during this flight. Set the [[heading bug]] to 250°. Arm the [[autopilot]] and set the initial [[altitude]] to 16,000 feet.&lt;br /&gt;
&lt;br /&gt;
The airfield SPRF, San Rafael has an [[elevation]] of 14,422 feet. That altitude will cause problems during take-off. It takes a lot longer for the aircraft to gain sufficient speed for take-off, also the take-off speed that is needed is higher as you would expect. Perhaps an additional notch of flaps is needed.&lt;br /&gt;
&lt;br /&gt;
Take-off, avoid the bumps (there are plenty) and fly a course of 250°. After about 80 NM you will fly over the radial of NAV1. Intercept the radial towards Arequipa. At a distance of 75 NM towards NAV1 you will have to increase altitude to 19,000 feet. &lt;br /&gt;
&lt;br /&gt;
At a distance of 50 NM towards NAV1 and 118 NM from NAV2 you will see and cross over the mountain [http://en.wikipedia.org/wiki/Nevado_Mismi Nevado Mismi] with an altitude of 18,362 ft. The rains and water on the area to the right until Nevado Mismi will leave towards the Atlantic ocean through the Amazon river. Anything to the left and after Nevado Mismi will leave towards the Pacific ocean.&lt;br /&gt;
&lt;br /&gt;
After Nevado Mismi you are tempted to descend. Don't. Just before the airfield is [http://en.wikipedia.org/wiki/Chachani Mt.Chachani] with an altitude of 19,872 feet and to the East is the active volcano [http://en.wikipedia.org/wiki/El_Misti El Misti] with an altitude of 19,101 feet. You can either increase the altitude and fly over the airfield or keep the altitude, even descend and fly between the mountains, your choice depends on the visibility.&lt;br /&gt;
&lt;br /&gt;
Fly using the heading bug and set NAV1 to [[ILS]] 109.7 with a radial of 93.2°. We will land at airfield [http://en.wikipedia.org/wiki/Rodr%C3%ADguez_Ball%C3%B3n_International_Airport SPQU, Rodriguez ballon], that has an elevation of 8,405 feet. There is a reason this airfield has just one ILS. The area South-West of the airfield is below 11,405 feet and is safe to navigate.&lt;br /&gt;
&lt;br /&gt;
Position the aircraft in front of the runway at an altitude of 11,405 feet, catch the [[glidescope]] at a distance of 9.5 NM and land your aircraft. After landing and parking your aircraft crawl into the tower to look around.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter May 2012]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:SPQU-001.png|thumb|left|pre - landing]]&lt;br /&gt;
[[Image:World-SPRF.png|thumb|right|Latitude: -14.267 Longitude: -70.467]]&lt;br /&gt;
* [[SPRF|SPRF - San Rafael]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPRF.pdf chart]&lt;br /&gt;
* [[SPQU|SPQU - Rodriguez Ballon]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPQU.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w020s80.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:SPQU-002.png|thumb|right|landed]] &lt;br /&gt;
I recomend a powerful jet angine airplane, but not too heavy !&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SPRF --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Middle East=&lt;br /&gt;
==Israel to Jordan over the Dead Sea==&lt;br /&gt;
[[Image:LLBS-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LLBS-002.png|thumb|right|flat land]] &lt;br /&gt;
Dead Sea is the lowest water elevation on the Earth. Take off from the Beer-Sheva Teyman airport and head East-North-East. About half way there, after the southern Hebron mountains ridge, there'll be a sharp drop-off down to the Dead Sea --- the lowest exposed point on the Earth.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It's really fun to descend and explore the beautiful coastline. In the real life, you wouldn't like to fly low over this water there of your own will --- while you don't need a life vest in the Dead Sea, the water is pretty caustic there for one's eyes. Once you're done marvelling the sights, continue on to the Queen Alia airport. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LLBS-006.png|thumb|left|landing in the dead sea, notice the altitude !]]&lt;br /&gt;
[[Image:OJAI-007.png|thumb|right|landing at Queen Alia Intl.]] &lt;br /&gt;
[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]&lt;br /&gt;
* [[LLBS|LLBS - Teyman]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LLBS.pdf chart]&lt;br /&gt;
* [[OJAI|OJAI - Queen Alia Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/OJAI.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/e030n30.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:LLBS-003.png|thumb|left|approaching the dead sea]]&lt;br /&gt;
[[Image:LLBS-004.png|thumb|right|there is also a minor airport]] &lt;br /&gt;
* [[Albatross]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LLBS --aircraft=Albatross&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Europe=&lt;br /&gt;
==Edinburgh to Oban==&lt;br /&gt;
See article: [[Edinburgh to Oban]].&lt;br /&gt;
&lt;br /&gt;
==Oban to Prestwick==&lt;br /&gt;
The west coast of Scotland offers some stunning scenery and a number of small airfields and airports to land at on both the mainland and the small islands the dot the coast. The distances between the various airfields are quite small, and some of the runways are on the short side, so STOL or GA aircraft are ideal. The tour suggested here follows part of a microlight trip I made this month, photos of which can be found [http://www.nanjika.co.uk/photos/gigha/ here].&lt;br /&gt;
&lt;br /&gt;
Oban airport (EGEO) lies on the west coast of Scotland, and offers fuel (both AVGAS and AVTUR) and a North/South tarmac runway.&lt;br /&gt;
&lt;br /&gt;
From Oban it is just a 10 minute flight west to the grass airfield of Glenforsa (EG45), on the north-east coast of the island of Mull. Due to the hills and water channel, this airfield often gets quite strange wind patterns - the weather can be perfect in Oban, but much gustier and windier at Glenforsa. At times the windsocks at either end of the runway can blow in completely opposite directions!&lt;br /&gt;
&lt;br /&gt;
Some distance north of Oban lie the airfields of the Isle of Skye (EG57) and Plockton (EG81). This is an excellent place from which to explore the mountains of the Isle of Skye, known as the Cuilins.&lt;br /&gt;
&lt;br /&gt;
Heading south from Oban, one can follow the coast to the island of Jura, with it's distinctive hills (The Paps of Jura). From Jura one can head south to the island of Islay with its numarous malt whisky distilleries (many of which are modelled in FG). Islay Airport (EGPI) has extensive runways. From Islay head north east to the tiny island of Gigha. Despite it's small size, it too has an airfield (EG44), though the FG version is tarmac rather than grass.&lt;br /&gt;
&lt;br /&gt;
From Gigha head east over the Mull of Kintyre, to the hilly isle of Arran, then north east to the Isle of Bute. Both islands have very small grass airstrips, which are sadly not present in FG. From Bute you can head south east to Prestwick International (EGPK), famous for being the only place Elvis touched down in the UK, and a fine place to end our tour.&lt;br /&gt;
*Published in [[FlightGear Newsletter July 2011]] by [[User:Stuart|Stuart]]&lt;br /&gt;
&lt;br /&gt;
== Edinburgh to Dundee ==&lt;br /&gt;
Edinburgh Airport (EGPH) is located to the West of the city of Edinburgh and south of the Forth rail and road bridges. You'll need the w010n50 scenery and the latest set of objects from the scenery DB which include a number of models for the Edinburgh area.&lt;br /&gt;
&lt;br /&gt;
From Edinburgh Airport, head north and circle the bridges, then follow the coast on the south eastwards past Edinburgh (watch out for the Castle!) and to East Lothian and Bass Rock - a volcanic plug in the sea that is host to thousands of sea-birds.&lt;br /&gt;
&lt;br /&gt;
There are a number of sights in East Lothian, include a distillery.&lt;br /&gt;
&lt;br /&gt;
If you wish to continue your tour, head back North, crossing the Firth of Forth to the Kingdom of Fife. Head approximated North West, tracking towards the Perth VOR (110.4). There is an airport here (Perth Scone, EGPT), but instead we will now track out on the 090 radial and pick up the ILS to Dundee Airport (108.10) landing beside the sea.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
==Austrian alps soaring==&lt;br /&gt;
Discover the Austrian alps with a glider. [[Pinzgauer Spaziergang]]&lt;br /&gt;
&lt;br /&gt;
== Sightseeing the Alps in a C172 ==&lt;br /&gt;
This tour will guide you to many of the most famous mountains, valleys, glaciers, snowfields, winter and summer vacation areas, etc. in the European Alps. In addition there are several hints to visit nearby areas of interest. On the tour you will visit Switzerland, Italy and France.&lt;br /&gt;
See the detailed description in: http://www.emmerich-j.de/FGFS/Alp-flying.pdf (mirrored to https://beni.hallinger.org/fgfs.nobackup/Alp-Tour-Jomo/)&lt;br /&gt;
*February 2011 by [[User:Jomo|Jomo &amp;amp;dagger;]].;&lt;br /&gt;
&lt;br /&gt;
* The scenic trip does take about 2 hours.&lt;br /&gt;
* Skyvector route: https://skyvector.com/?ll=46.464097146192884,7.159790050777061&amp;amp;chart=301&amp;amp;zoom=6&amp;amp;fpl=%20LSZC%204700N00836E%204647N00840E%204642N00836E%204637N00835E%204634N00823E%204634N00812E%204633N00809E%204634N00805E%204634N00801E%204631N00803E%204624N00746E%204619N00745E%204618N00753E%204614N00752E%204612N00749E%204609N00747E%204603N00746E%204601N00745E%204600N00738E%204555N00724E%204555N00712E%204553N00703E%204547N00652E%204549N00649E%204604N00634E%20LSGG&lt;br /&gt;
&lt;br /&gt;
== Salzburg to Zell am See via Hallstatt ==&lt;br /&gt;
[[File:LOWS-LOGO-LOWZ.jpg|thumb|The route for Salzburg to Zell am See via Hallstatt]]&lt;br /&gt;
This flight will bring you around a very scenic region of the austrian alps.&lt;br /&gt;
* [https://skyvector.com/?ll=47.5666119817603,13.107925427128999&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A040%20LOWS%204735N01311E%204736N01339E%204733N01340E%204733N01343E%204735N01343E%204738N01355E%204727N01357E%20LOWZ SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 1 hr. air time at 120 KTAS.&lt;br /&gt;
* Fly at an altitude of about 4000ft or so (the entire trip can be done at that altitude safely).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start ''Salzburg (LOWS)''; follow the Autobahn in the valley to the southeast until you reach the fork at ''Golling''. To the south you see the Mountains of the ''Tennengebirge''.&lt;br /&gt;
* Alternatively (and I recommned that), you can also deviate sothwest around ''Mt. Untersberg'' (1972m, hosting germanys longest and deepest cave, the ''Riesending'') to visit lake ''Königsee'' and watch the peaks of the ''Steinernes Meer'' (the dominant and very famous ''Mt. Watzmann'', 2713m!) and north side of the ''Mt. Hochkönig''. You need to climb to at least 6200ft to cross the final ridge at the end of the lake valley. After crossing, descend to 4000ft, follow the valley and fly north at the next valley to rejoin the route.&lt;br /&gt;
* Turn east and follow the valley and hills, aim for a prominent V-shaped incision at the end. Fly through there and you suddenly break out at the lake ''Hallstätter See'', a fjord-like lake 125m deep.&lt;br /&gt;
* Follow the ''Hallstätter See'' to the south, on its western shore is the famous town of ''Hallstatt''. At the mountain to your right (north of Hallstatt) is a very old settlement dating back to the late bronce age (Hallstattzeit, c. 800–450 BC) and there was a very important Salt mine dating back to that time and important archeological grave findings.&lt;br /&gt;
Looking south you can see the ''Dachstein'' (2995 m), a high peak hosting the ''Hirlatzhöhle'', with 120km the twentiest longest and with 1560m sixth deepest cave of planet earth.&lt;br /&gt;
* Follow the valley east bend to ''Obertraun'', and then north over the ''Koppenpass'' and the town of ''Bad Aussee''.&lt;br /&gt;
* From ''Bad Aussee'', fly straight to the lakes ''Grundlsee'' and ''Toplitzsee'' (you can't see the latter yet).&lt;br /&gt;
* Between the two, turn southwards and aim for the reservoir lake ''Salza'' which is in the sharp incision you can see to the south.&lt;br /&gt;
* After passing the reservoir, you may try to get down to ''Niederoblarn'' (LOGO) to the southeast, it's a short airfield.&lt;br /&gt;
* From there, follow the railway in the valley of Enns westwards, LOWZ is about 20 minutes away. On your right side watch out for the other side of the ''Dachstein'' and the town of ''Schladming'', which lies down in the valley next the rocky hills with the river flowing trough. Look for the railway and the river Enns.&lt;br /&gt;
* Behind ''Schladming'' (south of Mt. ''Dachstein'', approximately halfway of the distance LOGO/LOWZ) the valley will widen a bit again, featuring a rocky mountain in the middle of the valley. Continue to follow the railway and river bending nortwest arond the small mountain.&lt;br /&gt;
* Near the bigger town of ''Radstadt'' the valley will open significantly. Follow west, heading for the next town ''Altenmark'' at the end of the opening.&lt;br /&gt;
* The railway will bend north at ''Altenmark'' and soon join the Autobahn A10/E55. This is the point we need to go southwest and follow the next valley.&lt;br /&gt;
* The valley leads us westward to the Town of ''St. Johann/Pongau''. probably around the middle of the valley you can spot the prominent ''Mt. Hochkönig'' (2941m) northwest of ''St. Johann'' and the ''Tennengebirge'' to its right.&lt;br /&gt;
* Once reaching ''St. Johann'', continue to follow the next big valley west-southwest.&lt;br /&gt;
* After about 16 miles you will reach ''Zell am See'' (LOWZ) where we will land after around one hour flight time in total. Beware this is a short field.&lt;br /&gt;
&lt;br /&gt;
== Zell am See to Innsbruck via Mt. Venediger ==&lt;br /&gt;
[[File:LOWZ-LOWI.jpg|thumb|The route for Zell am See to Innsbruck]]&lt;br /&gt;
This flight will bring you to two of the core peaks of the Alpenhauptkamm.&lt;br /&gt;
* [https://skyvector.com/?ll=47.201656734623775,12.160079968084839&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A120%20LOWZ%20LOWZ%204708N01241E%204708N01221E%204706N01214E%204710N01152E%204724N01150E%20LOWI SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 45 minutes air time at 110 KTAS.&lt;br /&gt;
* Climb to at an altitude of about 10000ft or so after starting from [[:File:Lowz-parking.jpg|Zell am See]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After starting fly into the valley southwest over the town of ''Kaprun''. Maybe you need to circle a bit to gain altitude, near the mountains we need at least about 10000ft!&lt;br /&gt;
* Follow the valley until you overfly two lakes (''Stausee Wasserfallboden'' and ''Moorboden''). To your left you can see ''Mt. Großes Wiesbachhorn'' (3564m).&lt;br /&gt;
* The end of the valley goes over into a flank of the ''Großglockner'' which is near to the south. Follow the west bend of the valley end and fly over the lakes ''Tauernmoossee'' and ''Weißsee''. After you climb out of the valley, you already should see the peak of ''Mt. Venediger'' on the front left. Aim to the saddle right of its peak.&lt;br /&gt;
* You then fly that direction over several valleys that go from south to north, until you hit the very big valley that bend from south to west. The ridgeline right of that valley is the border between the Austrian states Tirol and Salzburg. Follow the valley up to the ''Venediger'', passing the ''Mt. Sandebentörl'' (2751m), still aiming for the saddle.&lt;br /&gt;
* Shortly after you reach the end of the valley and need to overfly the saddle with the glacier ''Venedigerkees'' behind it. The ridgeline is again the border between Tirol and Salzburg. Directly south of the ''Venedigerkees'' is the pyramid of ''Mt. Venediger''.&lt;br /&gt;
* Follow ''Venedigers'' ridge to the southwest, skip the first valley and overfly the next ridge.&lt;br /&gt;
* From here you can deviate into the valley north and visit the ''Krimmler Wasserfälle'', and from there west trough the main valley.&lt;br /&gt;
* If you instead follow the planned route westwards, aim to the peak of ''Mt. Zillerplattenspitze'' (3148m) with the small lake ''Eissee'' to its south flank which you should already see. This is a little hard to get right, but don't fly directly into the big valley but aim right to the second row mountain peaks at about 280 heading.&lt;br /&gt;
* Overfly the ridge with ''Eissee'' and follow the valley from there nothwest with the reservoir ''Zillergründl'' and ''Mt. Reichenspitze'' (3303m) to its right; until you reach the town ''Mayrhofen'' where the current valley meets the ''Zillertal'' valley. You also should start to descend now to about 3500ft with a rate of roughly -1000fpm.&lt;br /&gt;
* From ''Mayrhofen'' follow the ''Zillertal'' valley north and when reaching the ''Inntal'' valley near the town ''Jenbach'', Innsbruck Airport is a few minutes to the west. If you like, you can divert north at ''Jenbach'' to visit ''Achensee'', and even continue further north to land at Munich via lake ''Tegernsee'' or via the Isartal over ''Bad Tölz''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Crossing the alps ==&lt;br /&gt;
[[File:ED02-LIPB.jpg|thumb|The route for Fuessen to Bolzano]]&lt;br /&gt;
This trip brings us from germany via austria to italy, crossing the alps, visiting the famous castle Neuschwanstein and Mt. Zugspitze, germanys highest peak.&lt;br /&gt;
* [https://skyvector.com/?ll=47.068251080980836,10.959411633048108&amp;amp;chart=301&amp;amp;zoom=5&amp;amp;fpl=N01204735N01041E%204734N01045E%204729N01042E%204726N01046E%204724N01054E%204712N01054E%204704N01058E%204656N01103E%204655N01106E%204653N01109E%204650N01110E%204648N01113E%204638N01110E%20LIPB SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather and time (I suggest to start with the first light/sunrise).&lt;br /&gt;
* There are no helpful navaids for this trip, but Bolzano NDB: 362 BZO may serve as a final guidance.&lt;br /&gt;
* Trip takes around 45 minutes air time at 120 KTAS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start at ED02 Fuessen, climb to about 3000 and head southeast to visit castle Neuschwanstein, south of the Forgensee.&lt;br /&gt;
* After looking at the castle (challenge: fly close around behind it), we start climbing to 3500 and aim southwestish and cross over from germany to austria.&lt;br /&gt;
* Fly into the big valley directing south. East of Reutte start climbing 500fpm to 6000 and follow the railway in the valley to the southeast.&lt;br /&gt;
* Once the valley opens significantly, you can see the famous mountain Zugspitze (germanys highest peak, 2962 m) to the front.&lt;br /&gt;
* Head southwards around the Mt. Gartnerwand over town Ehrwald and fly between the two small peaks over the Marienbergjoch mountain pass, 1789m/5870ft (between Mt. Wanning and Mt. Marienberg; challenge: who can make it with the least altitude?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After overflying the second mountain, to the south comes a new valley called Ötzal where you fly into.&lt;br /&gt;
* Follow that valley all the way to the south and slowly climb to at least 8600 now (300fpm or so). Note overflying Längenfelden, where the dominant valley joins from the east with the river Fischbach, halfaway the leg; this looks similar to the end, but isn't.&lt;br /&gt;
* Follow the valley until it starts to branch in all different directions at the end (over the town of Sölden and Zwieselstein).&lt;br /&gt;
* We follow the Southeast main branch and then turn quickly to a smaller valley branching off directly eastwards (look for the mountain pass road).&lt;br /&gt;
* That brings us to the mountain pass of the Timmelsjoch and is the place where we cross over to Italy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After passing, we can descend to 2500 or so, following the terrain. Follow the valley and its river &amp;quot;Passer&amp;quot; southeast, and follow its bend to the south.&lt;br /&gt;
* Follow the valley and make a nice turn around Mt. Kolbenspitze's east ridge, over San Leonardo, still following the Passer river now southwards.&lt;br /&gt;
* Where the valley hits the next big valley &amp;quot;Etschtal&amp;quot;, is a bigger famous city called Merano. From there we follow the River Etsch and the Autobahn (highway) to the south and are soon approaching the somewhat hidden airport of Bolzano (LIPB) after an estimated time of somewhat under one hour at 120 knots.&lt;br /&gt;
&lt;br /&gt;
From here you can also continue more to the south to Trento (LIDT, total FT ~1:00) or Verona (LIPX, total FT ~1:20) - just follow the river Etsch to the south! Venezia is also not far away, just ~30 minutes/62nm to the east of Verona.&lt;br /&gt;
&lt;br /&gt;
==Grenoble Le-Versoud==&lt;br /&gt;
&lt;br /&gt;
[[Image:LFLG.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
France : '''LFLG'''  ( Grenoble Le-Versoud ) airport : border of Alps&lt;br /&gt;
*P.A.F. home base [http://equipe-flightgear.forumactif.com/ link]&lt;br /&gt;
*Scenery : http://clemaez.fr/flightgear/flightgearfrance_05062011.tar.gz&lt;br /&gt;
*Texture : http://clemaez.fr/flightgear/pattentextures_maj24082011.tar.gz&lt;br /&gt;
&lt;br /&gt;
* Take-off from Grenoble le Versoud (LFLG). Head south following the general direction of the Alps. Bearing left (East) will take you into high alpine territory, while towards the West lie the plains of the Rhône valley. Once you reach the Mediterranean coast, follow it to land in Marseilles (LFML), Nice (LFMN), or another smaller airport serving the French Riviera.&lt;br /&gt;
*Published in [[Custom France Scenery]].&lt;br /&gt;
&lt;br /&gt;
==Gulf of Finland sightseeing tour==&lt;br /&gt;
Take a VFR sightseeing tour over the Gulf of Finland from Helsinki to Tallinn! Estonia's landmarks are all recent additions, while Helsinki was one of the first cities to have original models in the scenery model database.&lt;br /&gt;
&lt;br /&gt;
Take off from the smaller EFHF airfield in Helsinki, or try your luck fighting the virtual traffic at Vantaa, and head toward the port of Helsinki. Look for the Hartwall Arena, the Pasila tower, the railway station and the Olympic Stadium along the way. Make your way out over the Gulf flying just west of south - a heading of 190 should set you up nicely for a sightseeing tour of Tallinn. Try to come in from the west and do a sweeping left turn over the capital of Estonia, looking out for the Swissotel, Olympic Hotel, the Television tower, and other important landmarks in the capital city of Estonia. Make sure you look out for St. Olaf's Church, the tallest building in the capital city. Make your way over the Ulemiste Jarv (lake) to land on runway 09 at Tallinn's main airport.&lt;br /&gt;
&lt;br /&gt;
If you desire, you can do a touch-and-go at Tallinn and set your course southeastward, landing at Tartu Airport, which is also modelled in FlightGear.&lt;br /&gt;
&lt;br /&gt;
The distance between Helsinki and Tallinn is about 50 miles or 80 kilometres, while Tartu is twice the distance from Tallinn at 100 miles/160 kilometres. Fly a heading of 135 to get to Tartu from Tallinn.&lt;br /&gt;
*Published in [[FlightGear Newsletter October 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
==Azores==&lt;br /&gt;
[[Image:LPLA-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LPLA-002.png|thumb|right|approaching island]] &lt;br /&gt;
The [http://en.wikipedia.org/wiki/Azores Azores], set in the middle of the Atlantic ocean, has had many names. Fortunate Isles, the Blue Islands, the Islands of Tin and Silver, the Islands of the Seven Cities. We can add, the Islands of Amazing Sights and Flights.&lt;br /&gt;
&lt;br /&gt;
Our flight is to celebrate the amazing views FlightGear can give us.&lt;br /&gt;
&lt;br /&gt;
Start your plane at [[Lajes Field]] (LPLA). This once was an emergency landing site for the [[Space Shuttle]] so you will have plenty of room to take off.&lt;br /&gt;
We will have to fly an odd pattern. The reason for that: if you don't fly too high (stick around 3000 while you can) you will have some amazing views.&lt;br /&gt;
&lt;br /&gt;
Next, fly towards and over LPPD. Look out the window and enjoy the view. Then head out towards LPHR. If you feel LPHR coming near, look out the window good, you might have to pull your plane up.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
*Published in [[FlightGear Newsletter August 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LPPD-001.png|thumb|left|over the island]]&lt;br /&gt;
[[Image:LPPD-002.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LPLA|LPLA - Lajes Field]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPLA.pdf chart]&lt;br /&gt;
* [[LPPD|LPPD - Ponta del gada]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPPD.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w020n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LPLA --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Canary Islands Trip ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An archipelago in the middle of the Atlantic sea, stunning beauty where you won't expect it. Seven islands, seven continents, thats what the canarian people say. And it's true, you will face seven totally different islands and nine different airports. &lt;br /&gt;
Take off from the largest one, GCLP, at the main island Gran Canaria. Leave the beautiful island heading to the west, and land at GCTS, the southern airport at Tenerife. Enjoy the view on Spains highest mountain, the glaciered Teide, when flying to La Gomera (GCGM), one of the greenest islands there. Master the short runway, and enjoy the view, before taking the challenge and approach El Hierro (GCHI). A short runway, with cliffs and rocks on both ends will cause you to sweat. From this island, which was claimed to be the western end of the world in medieval times, you'll turn to the beautiful and wild island of La Palma (GCLA). The next approach will be historical, because you are approaching the notorious Tenerife North (GCXO). Yes, I am serious, you will face that airport, where the worst civil plane crash ever took place. But you needn't worry, if you got that far, you will do this approach as easy as any other. The longest flight on your trip will take you to the eastern island, Lanzarote (GCRR). Take a look at the volcanic-red mountains, the vineyards, and the beaches. You want more beaches?? Depart to the south-west, fly over the small island of Los Lobos, and land in the holiday-paradise Fuerteventura. Enjoy dunes, bays, and very nice long beaches, before you finally touch down in Fuerteventura (GCFV). You want to stay? Okay, let's taxi to a parking position, and cut off the engines. If you still want more, fly back to Gran Canaria's GCLP, where we started our trip. &lt;br /&gt;
&lt;br /&gt;
Custom scenery: [[Canary Islands Custom Scenery]] / direct source: https://github.com/D-ECHO/Canarys &lt;br /&gt;
&lt;br /&gt;
=== Suggested Aircraft ===&lt;br /&gt;
&lt;br /&gt;
* small civil aircraft, such as the Cessna Skylane, Skyhawk, or Citation&lt;br /&gt;
* small airliners, like the Q400, the ATR72, the CRJ200, or similar&lt;br /&gt;
&lt;br /&gt;
Route by Flycanarias&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gibraltar==&lt;br /&gt;
[[Image:LEMG-010.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LEMG-011.png|thumb|right|just after take off]] &lt;br /&gt;
Traffic lights turn red, gates are closed. The only busy main road to the peninsula is closed and all the cars and trucks are waiting patiently. Waiting for a train to pass? No. Waiting for a plane to pass since the main road crosses a busy runway.&lt;br /&gt;
&lt;br /&gt;
On both sides water and being crossed by a busy main road can only be one runway: [http://en.wikipedia.org/wiki/Gibraltar_Airport Gibraltar airport]!&lt;br /&gt;
&lt;br /&gt;
One would expect an ILS installed on such a tricky runway but no, you will have to guess where it is and how far away it is. Not even an ADF points to it. &lt;br /&gt;
&lt;br /&gt;
Take off from LEMG (Malaga). Go South-West and find the runway of LXGB somewhere to the right of the rock. Happy guessing!&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LEMG-013.png|thumb|left|search for this]]&lt;br /&gt;
[[Image:LEMG-015.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LEMG|LEMG - Malaga]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LEMG.pdf chart]&lt;br /&gt;
* [[LXGB|LXGB - Gibraltar]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LXGB.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w010n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Piper Aerostar]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LEMG --aircraft=aerostar700 --adf1=300 --nav1=300:117.80&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Asia=&lt;br /&gt;
==Khorog, Tajikistan==&lt;br /&gt;
[[File:Fw190HinduKush.jpeg|left|thumb|Approaching a bank of snow-covered mountains in the south of the Hindu Kush]]&lt;br /&gt;
Surrounded by spectacular mountains and nestled in the end of a valley, Khorog Airfield (UT1C) makes an interesting place to land. It can only be approached by flying down the curved valley that snakes in from the North. Flying from here to OPCH (Chitral, Pakistan) at around 500ft AGL all the way is a wonderful way to explore the Hindu Kush mountains.&lt;br /&gt;
&lt;br /&gt;
If you bring a piston engined aircraft, be prepared to adjust the mixture as you climb - at the highest point in the flight, you will be at around 22000ft. Also, don't forget to carry plenty of fuel - there are very few airfields in the Hindu Kush that exist in FlightGear. This is a scenery bug that will hopefully be fixed in the future.&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:Armchair Ace| Armchair Ace]], published in [[FlightGear_Newsletter_January_2012#Suggested_flights| Newsletter January 2012]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Central Karakoram range ==&lt;br /&gt;
Let's explore one of the highest regions of the planet - the central Karakoram with the densest concentration of mountains of 8000 m and above. We're going to need a good climbing performance for the trip - even the frozen plateau of Baltoro glacier, above which K2 and Gasherbrum V and VI loom, is more than 13,000 ft high.&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram1.jpg|300px|thumb|left|Circling Gasherbrum I]]&lt;br /&gt;
&lt;br /&gt;
Take off from Skardu airport in Pakistan (OPSD). Skardu has a reasonably long (11,944 ft) runway at just 7,316 ft elevation, so you can take a jet, but for instance the [[De Havilland Canada DHC-6 Twin Otter|Twin Otter]] is more stylish. &lt;br /&gt;
&lt;br /&gt;
South of Skardu lies Deosai park, a famous high plateau, but we turn initially east. There's a chain of lakes which is the Indus river. After about five miles, the Shigar river merges with the Indus. Turn slightly left and follow the Shigar, then follow it into a long and broad lake-filled valley stretching into north-western direction.  &lt;br /&gt;
&lt;br /&gt;
Towards the end of the lake, a small tributary river, the Braldu, turns eastward out of the main valley. Follow the Braldu and start climbing (if you haven't done so yet). About 15 miles after turning into the Braldu river valley, two glacier-filled valleys stretch to the north - admire the view!&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram2.jpg|300px|thumb|right|Heading back into Skardu, Nanga Parbat on the horizon]]&lt;br /&gt;
&lt;br /&gt;
Passing a few lakes, you reach finally Baltoro glacier continuing the river valley stretching eastward. Ever climbing, follow the glacier till you reach some kind of T-junction. The glacier arm reaching north leads to K2 (which sadly isn't really there in Flightgear), but just ahead of you are the still rather impressive peaks of Gasherbrum V, VI and I - circle the range and make some pictures!&lt;br /&gt;
&lt;br /&gt;
A good way back to Skardu is to go about 10 miles sourth from the Gasherbrum peaks, then head due west.  To your west, you can see the long valleys fall away from the high ranges, to your right is the still glacier-covered high Karakoram. On a clear day (really good visibility selected) you can see the distinctive peak of Nanga Parbat appearing straight ahead on the horizon. The valley of Skardu is quite a distinctive feature and finding back VFR should not be a problem.&lt;br /&gt;
&lt;br /&gt;
Published in [[FlightGear_Newsletter_April_2012#Suggested_flights| Newsletter April 2012]] by [[User:Thosten|Thosten]].&lt;br /&gt;
&lt;br /&gt;
=Africa=&lt;br /&gt;
==Ngorngoro==&lt;br /&gt;
For this [[VFR]] trip we need a strong machine since we will go up from 4000 to about 10,000 feet and since we are in Africa, Tanzania , what better choice is there as the Cessna 208 Caravan, on wheels. We will take off from HTLM, [http://en.wikipedia.org/wiki/Lake_Manyara Lake Manyara], runway 12 (124.5 deg), that has an elevation of 4150 feet. Hit Shift-B so we don't drop off the runway. &lt;br /&gt;
[[File:Map Ngorngoro Crater.jpg|thumb|200px|left|Heightmap with visual reference points]]&lt;br /&gt;
We will have to change some settings before we take off. There is no snow where we are so: View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5000M). We need a reasonable clear sky since there are quite a few bumps we could hit: Environment=&amp;gt; Global weather=&amp;gt; METAR source=&amp;gt; Fair weather.&lt;br /&gt;
&lt;br /&gt;
Give full throttle and take off. Bank left and make a full circle so we gain some altitude and make a mental note of the airstrip, since this is the only one nearby. Look at the road West towards the airfield. &lt;br /&gt;
You will notice that the airstrip is at the edge of a mountain ridge, the lake to the East is quite a lot lower.&lt;br /&gt;
&lt;br /&gt;
We pass over the airstrip towards lake Manyara and turn left keeping the mountains close to our left side, on an initial course of about 30 deg. We keep the mountains to our left and follow our path, our heading will slowly go from 30 to North and takes about 15 mins. During our path we should slowly gain altitude. &lt;br /&gt;
[[File:Ol Doinyo Lengai.jpg|thumb|250px|Mt.Kerimasi (left), Mt.Ol Doinyo Lengai (ahead)]]&lt;br /&gt;
On the '''image''' we see two distinct mountains. The nearest is Mt.Kerimasi, a fun place for hang-gliders, and North Mt.Ol Doinyo Lengai, an active volcano. We are heading straight towards [http://en.wikipedia.org/wiki/Ol_Doinyo_Lengai Mt.Ol Doinyo Lengai]. Just before we would collide we take a sharp left turn heading 225. You will see why we need the altitude now.&lt;br /&gt;
&lt;br /&gt;
The mountain ahead, [http://www.ntz.info/gen/n00161.html#id03702 Mt.Embagai], we see does not appear to be anything spectacular. Aim towards it since we have to go over it. &lt;br /&gt;
Coming nearer, if you are high enough, 9000 feet, you will see why this mountain is well worth a visit. It is a crater with a lake inside, lake Embagai (Empakaai). Enter the crater and look around, careful not to loose any height since we'll have to get out again, we need about 10 000 feet. Mesmerized we grab our compass and take a course of 225 again. To get out we might skim against a cloud, be careful. If you don't see a way out take a turn again to wait for the clouds to move out of sight.&lt;br /&gt;
&lt;br /&gt;
After you managed to get out of the crater keep on the course of 225 while descending slowly for about 9 mins. There are some bumps to avoid, like Mt.Olmoti we keep to the right and Mt.Losirua on the left. &lt;br /&gt;
&lt;br /&gt;
After a small hill we enter one of the most amazing places in Africa, the [http://en.wikipedia.org/wiki/Ngorongoro_Conservation_Area Ngorngoro Crater], the second biggest crater in the world. A micro climate and amazing wildlife.&lt;br /&gt;
Examine the crater and you will notice two lakes, head towards the biggest lake, lake Magadi. When you are above it take a course of 123 to get out of the crater.&lt;br /&gt;
&lt;br /&gt;
After leaving the crater it takes some time before we are near the airstrip again. After about 5 mins we will see a river (left) and a road (right). Follow the road since it will lead us to the airstrip again.&lt;br /&gt;
&lt;br /&gt;
Don't scare the wildebeast!&lt;br /&gt;
&lt;br /&gt;
Notecard:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
#Fair weather, no snow&lt;br /&gt;
#HTLM RW 12 4150 feet&lt;br /&gt;
#Course 30 to 0 deg 15 mins, mountains close left&lt;br /&gt;
#Head towards /\volcano&lt;br /&gt;
#Sharp left turn course 225 deg altitude 9000 feet&lt;br /&gt;
#Volcano, lake, 10 000 feet&lt;br /&gt;
#Course 225 deg, slow descend 9 min&lt;br /&gt;
#Large lake, course 123 deg 5 mins&lt;br /&gt;
#River left, road right. Follow road&lt;br /&gt;
#Landing 124.5 deg 4150 feet.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]]. Published in [[FlightGear_Newsletter_December_2011#Suggested_flights | Newsletter December 2011]].&lt;br /&gt;
==Kisimayu to Kilimanjaro==&lt;br /&gt;
We have to take a big airliner for this trip. The runways are long enough but for this trip we need some altitude and a slow descend.&lt;br /&gt;
&lt;br /&gt;
We park our Big Bird at HCMK, [http://en.wikipedia.org/wiki/Kismayo_Airport Kisimayu], Somalia, near the East coast of Africa. It's unsure what this airfield is used for but it's a long piece of tarmac. I could not find regular flights to and from this airfield, not so strange, there is no lighting, no radio beacons and... no fuel. What you can find is Global Air Rescue that has an air ambulance service based here (with a [http://www.globalairrescue.com/learjet-35.php Learjet 35]).&lt;br /&gt;
&lt;br /&gt;
Our route will be around 425 nm in length. You know your aircraft and know what altitude you will need to fly.&lt;br /&gt;
&lt;br /&gt;
Our destination, HTKJ, [http://en.wikipedia.org/wiki/Kilimanjaro_International_Airport Kilimanjaro], Tanzania, has only one ILS and I have learned, if an airfield has only one ILS there is probably a reason. &lt;br /&gt;
&lt;br /&gt;
Flight Plan (short version):&lt;br /&gt;
#HCMK Kisimayu, length 12,177 ft, no navaids near.&lt;br /&gt;
#GAR Garissa [[VOR-DME]] freq 115.7 heading 268° dist 169 nm.&lt;br /&gt;
#KB Kilimanjaro [[NDB]] freq 393.0 heading 224° dist 258 nm, here is the holding pattern for the Kilimanjaro runway (and there is a [http://en.wikipedia.org/wiki/Mount_Kilimanjaro 19,000 ft] reason for this detour).&lt;br /&gt;
#KV Kilimanjaro VOR-DME freq 115.3 heading 70° dist 26 nm.&lt;br /&gt;
#HTKJ Kilimanjaro [[ILS]] freq 110.9 runway heading 88° elev 2,900 ft [[AMSL]] length 11,807 ft.&lt;br /&gt;
&lt;br /&gt;
Prepare your flight well to receive amazing views of the landscape during the final steps of the route, if you don't you will discover why some pilots call Kilimanjaro Kill-You-Manjaro.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | KCJi_ZaR8ec}}&lt;br /&gt;
Youtube video: Kilimanjaro approach in real, in FG not much different.&lt;br /&gt;
&lt;br /&gt;
*February 2012 by [[User:PH-JBO|PH-JBO]].&lt;br /&gt;
&lt;br /&gt;
=Australia and Oceania=&lt;br /&gt;
&lt;br /&gt;
==Hawai'i==&lt;br /&gt;
[[Image:Maui03.jpg|thumb|250px]]&lt;br /&gt;
Do you use [[TerraSync]]? If so, try a flight around Hawaii! Take off from PHNL in a light aircraft and head west until you hit Pearl Harbor; a right turn north will take you post the USS Arizona Memorial, and the Punchbowl Crater will be to your right. Or, fly east from PHNL past volcanic craters Diamond Head and Koko Head. If you follow the O'ahu coastline north from Koko Head, you can land at either old World War II airbase Bellows Field (now a wildlife reserve in real life) or at Keahole MCAS.&lt;br /&gt;
&lt;br /&gt;
For a potentially more scenic route, fly east toward Molokai, and stay to the north (left) of the island. The northern part of Molokai features huge sea cliffs and a tiny airstrip on the Kalaupapa peninsula - the peninsula being the only respite from the cliffs. A former leper colony existed near the airstrip!&lt;br /&gt;
&lt;br /&gt;
Also of interest are the volcanoes on Maui and the 'Big Island' of Hawai'i - flying VFR in a small plane from PHTO to PHKO over the plateau between Mauna Kea and Mauna Loa can be a challenge, as you have to take off from sea level, fly through a pass of 6500 feet, and then drop back down to sea level to land! The Hana coast of northern Maui is also a nice flight - a circumnavigation of Haleakala, starting and ending at PHOG, is quite a nice flight.&lt;br /&gt;
&lt;br /&gt;
The islands will be available through the download center with the next major scenery release, but for now, fire up [[TerraSync]] and your favorite VFR aircraft and have a blast.&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
==Brisbane International Airport to Sydney International Airport==&lt;br /&gt;
Going from Brisbane International Airport to Sydney International Airport. You should have a heading of about 203. Might take sometime to arrive to this section. Maybe 10-30 mins into the flight. Can't really say but don't give up, you will eventually reach this section of the flight. '''''Your eyes will be rewarded!''''' .&lt;br /&gt;
&lt;br /&gt;
[[Image:Fgfs-screen-020.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-016.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-012.png|200px]]&lt;br /&gt;
*Published in [[FlightGear Newsletter April 2011]] by [[User:Vin|Vin]]&lt;br /&gt;
&lt;br /&gt;
=Antarctica=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Suggested}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139884</id>
		<title>Suggested Flights</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139884"/>
		<updated>2024-05-29T06:32:54Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Sightseeing the Alps in a C172 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;!-- if you add new flights to this page it would be cool to include your name and month of writing. Also include the newsletter month and year if the flight has been published in one. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ------------------------------------------------- --&amp;gt;&lt;br /&gt;
[[FlightGear]] has accurate and realistic terrain. Here are some interesting places where you can do virtual sight seeing.&lt;br /&gt;
&lt;br /&gt;
If you are starting with [[FGRun]] - the FlightGear launcher - you can enter the [[airport]] id and select the runway on the appropriate screen in the startup wizard.&lt;br /&gt;
If you are starting from the command line you can use the options: &amp;lt;tt&amp;gt;--airport=ABCD&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;--runway=12L&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Remember to give a look at the [[Suggested Airports]] page, where you can find a comprehensive list of high quality airports in FlightGear.&lt;br /&gt;
*If you enjoy these flights, please consider recording a flight and posting a link to it at the [[Suggested Prerecorded Flights]] page.&lt;br /&gt;
&lt;br /&gt;
'''Remove before flight!''' &amp;lt;!-- No comprendo? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before you start flying into one of the suggested flights, you should add both the terrain and the Objects to you FlightGear installation; This is well explained on the [[Howto: Install scenery|installing scenery]] page.&lt;br /&gt;
&lt;br /&gt;
p.s. charts are generated using FlightGear data only.&lt;br /&gt;
&lt;br /&gt;
This page includes the flights described on the [http://www.flightgear.org/places.html main website] and the suggested flights from the newsletters. It can serve as an archive for suggested flights from future [[FlightGear Newsletter|newsletters]] or can give a flight if creativity is low that month. &lt;br /&gt;
&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
&lt;br /&gt;
=Cross Continentals or World Tour=&lt;br /&gt;
&lt;br /&gt;
* [[Breitling DC-3 World Tour]][[File:Rect17.png|thumbnail]]&lt;br /&gt;
* [[Flying the Hump]]&lt;br /&gt;
&lt;br /&gt;
=North America=&lt;br /&gt;
==Round Valley Airport==&lt;br /&gt;
[[Image:O09-002.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:O09-003.png|thumb|right|Valley]]&lt;br /&gt;
Covalis, CA. The airport is at the West edge of a 7 mile across valley.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The predominant wind is a cross wind. Take-offs to the west (if they use the full runway length) often have to fly between 2 small hills and over another valley while gaining altitude. Most pilots take off to the west.&amp;lt;BR/&amp;gt;&lt;br /&gt;
It is a paved runway and quite long. It was designated as an emergency recovery field during the Cold War and was used twice that I know of by military aircraft that could not take off again from the field. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
{{Location map | USA&lt;br /&gt;
| caption = Latitude: 39.790156 Longitude: -123.266403&lt;br /&gt;
| lat_deg = 39.790156&lt;br /&gt;
| lon_deg = -123.266403&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* [[O09|O09 - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/O09.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
I have tried this trip using a p38, quite powerful airplane&lt;br /&gt;
* [[Lockheed-P38|P38]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=O09 --runway=28 --aircraft=p38&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Half Moon Bay==&lt;br /&gt;
[[Image:KHAF-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:KHAF-002.png|thumb|right|Bridge]]&lt;br /&gt;
Start at [[KHAF|Half Moon Bay]], Runway 30, with 32km visibility; Takeoff in the C172 and climb to 1000 feet, then continue north over the water, near the shoreline. Look out the right window frequently. Fly up the coast, overfly the Golden Gate Bridge, continue around the top of the peninsula past downtown SF, then fly on to [[KSFO]] for a landing. We now have lots to see.&lt;br /&gt;
&lt;br /&gt;
If you cannot see the runway in the default 172, you must be flying too high or too slowly. You can start by practicing a bit with a good setup:&lt;br /&gt;
&lt;br /&gt;
'''fgfs --offset-distance=1.5 --altitude=500 --vc=70'''&lt;br /&gt;
&lt;br /&gt;
As soon as FlightGear starts, cut the power to 1500 rpm and drop two notches of flap. Maintain 70 kt. Now, pick your landing spot (a bit down the runway) and try to hold it in the same spot on your windshield. If your landing spot starts moving down, you are too high, and should cut another 100 rpm; if it starts moving up, you are too low, and should add another 100 rpm. Adjust the nose to keep your speed at 70 kt all the way down until you're right above the numbers, then cut power to idle, drop the last notch of flaps, flare, and land.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KHAF-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:World-KHAF.png|thumb|right|Latitude: 37.513333 Longitude: -122.501111]]&lt;br /&gt;
* [[KHAF|KHAF - Half Moon Bay]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KHAF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
no required scenery tile.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSFO-001.png|thumb|left|Before landing]]&lt;br /&gt;
Use the default c172 airplane &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KHAF --runway=30 --visibility=32000 --aircraft=c172&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
April 2006 [[User:Hellosimon|Hellosimon]], format and extended by [[User:Francescobrisa|Francescobrisa]]&lt;br /&gt;
&lt;br /&gt;
==Hell's Canyon==&lt;br /&gt;
[[Image:25U-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:25U-004.png|thumb|right|Valley]]&lt;br /&gt;
Hell's Canyon, Imnaha, OR. This airport is located just west of &amp;quot;Hell's Canyon National Park&amp;quot; which has the Snake River running through it.&amp;lt;br/&amp;gt;&lt;br /&gt;
Supposedly it's a 5500 foot drop from the top of the canyon to the river.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The airport is located on the brink of this canyon.&lt;br /&gt;
&lt;br /&gt;
See the remarks on the airport page (click on the airport id) ... DOWNDRAFTS, SHEER DROP IN TERRAIN, LIVESTOCK, etc. Don't go here on your first solo x-country. :-) &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:25U-005.png|thumb|left|Landing]]&lt;br /&gt;
[[Image:World-25U.png|thumb|right|Latitude: 45.427861 Longitude: -116.693889]]&lt;br /&gt;
* [[25U|25U - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/25U.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:25U-006.png|thumb|left|Landing 2]]&lt;br /&gt;
I have tried this trip using a pilatus PC-9M, powerful airplane&lt;br /&gt;
* [[PC-9M|PC-9M]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=25U --aircraft=PC-9M&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crater Lake National Park Tour==&lt;br /&gt;
[[Image:64s-003.png|thumb|left|Approaching the lake]]&lt;br /&gt;
[[Image:64s-002.png|thumb|right|Direction 40 degrees]]&lt;br /&gt;
Prospect, OR.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take off and fly at a heading of about 40 degrees until you cross the first distinct ridge in front of you. (several minutes of flight in the navion ... just climb as fast as you can, it will be a close squeek to get over :-)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you clear the ridge and can see beyond it, turn right and fly a heading of about 70 degrees. You should see two shallow peaks off in the distance. Head right between these -- they are the two sides of the crater. As you get closer the shape of the crater will come into view. There's a lake there in real life, hopefully it will be there in flight gear too before long.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:64s-001.png|thumb|left|Leaving the 64S airfield]]&lt;br /&gt;
[[Image:World-64S.png|thumb|right|Latitude: 42.743183 Longitude: -122.488092]]&lt;br /&gt;
* [[64S|64S - Prospect State]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/64S.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:64s-004.png|thumb|left|Lake view 1]]&lt;br /&gt;
[[Image:64s-005.png|thumb|right|Lake view 2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ryan_Navion|Navion]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=64S --runway=02 --aircraft=navion &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Grand Canyon Tour==&lt;br /&gt;
[[Image:Grand_Canyon_Tour_4.jpg|700px|frameless|center]]&lt;br /&gt;
Being a special place, there are also special flight rules for VFR traffic around the Grand Canyon. There are multiple no-fly-zones set up and VFR traffic is only allowed to fly via the designated corridors. If you want to fly realistically, avoid these zones in FlightGear as well, following for example the [https://skyvector.com/?ll=36.18649251415492,-112.52223157994264&amp;amp;chart=230&amp;amp;zoom=5&amp;amp;fpl=%20KGCN%20VPGCF%20VPGCG%20VPGCD%20VPGCC%20VPGCA%203608N11252W%203609N11309W%201Z1%201G4%203AZ5 route shown here. (skyvector link)]&lt;br /&gt;
&lt;br /&gt;
This flight takes you from KGCN, the Grand Canyon National Park airport, to 3AZ5, a small airfield called Hualapai located south of the Grand Canyon. Departing from KGCN, fly north-west bound to reach the canyon. From there, either follow the route shown on skyvector above, or fly visually through the canyon westbound towards 1Z1, Grand Canyon Bar Ten Airstrip. From there on, continue flying westward to 1G4. Called Grand Canyon West, 1G4 also marks about the western end of the canyon. To get to your destination 3AZ5, continue along the southern rim, flying eastward now. Shortly after leaving the breathtaking valley behind you, you will already reach your destination. Land and let your engine and your mind cool down from the special views :)&lt;br /&gt;
&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Grand_Canyon_Tour_2.jpg&lt;br /&gt;
Grand_Canyon_Tour_3.jpg&lt;br /&gt;
Grand_Canyon_Tour_1.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports===&lt;br /&gt;
* KGCN - Grand Canyon National Park Airport - [https://www.aopa.org/destinations/airports/KGCN/details aopa.org]&lt;br /&gt;
* 1Z1 - Grand Canyon Bar Ten Airstrip - [https://www.airnav.com/airport/1Z1 airnav.com]&lt;br /&gt;
* 1G4 - Grand Canyon West - [https://www.airnav.com/airport/1G4 airnav.com]&lt;br /&gt;
* 3AZ5 - Hualapai - [https://www.airnav.com/airport/3AZ5 airnav.com]&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
Most VFR aircraft with sufficiently big windows will serve the purpose, for example:&lt;br /&gt;
*[[Cessna C172P]]&lt;br /&gt;
*[[Optica]]&lt;br /&gt;
*[[Ryan_Navion]]&lt;br /&gt;
If you are more interested in flying helicopters, the [[Eurocopter EC130 B4]] with the Grand Canyon Helicopters livery might be for you.&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
*[https://www.nps.gov/grca/learn/nature/upload/sfra.pdf Chart of the Grand Canyon special airspace, published by the National Park Service]&lt;br /&gt;
*[http://www.swaviator.com/html/issueJJ99/canyon.html An article about flying close to the Grand Canyon]&lt;br /&gt;
*[https://www.aopa.org/news-and-media/all-news/2017/april/flight-training-magazine/road-trip-grand-canyon AOPA Flight suggestion]&lt;br /&gt;
&lt;br /&gt;
==Ranger Creek Airport==&lt;br /&gt;
[[File:21w-1.jpg|500px|center|Waiting for departure at Ranger Creek]]&lt;br /&gt;
Ranger Creek Airport is located in Greenwater, Washington, USA. Being wedged into the bottom of a steep canyon, you'll definitely need to be on your toes to get in and out of there. Switch on Advanced Weather and Live Data to experience what the winds can do to you in real life!&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
* [[21W|21W - Ranger Creek]] - [http://www.airnav.com/airport/21W airnav.com]&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Ranger_Creek1.jpg|Departing between the mountains&lt;br /&gt;
Ranger_Creek_2.jpg|Looking back towards the airfield&lt;br /&gt;
Ranger_Creek_3.jpg|Downwind for approach back to Ranger Creek&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
For this flight, the Piper PA-18 SuperCub is suggested, this is included in the [[Piper J3 Cub]] package&lt;br /&gt;
&lt;br /&gt;
==Mount Rainier Tour==&lt;br /&gt;
[[Image:WA20-002.png|thumb|left|The mountain from far away]]&lt;br /&gt;
[[Image:WA20-006.png|thumb|right|external view]]&lt;br /&gt;
Eatonville, WA. Start out at Swanson Airport in Eatonville, WA. Take off and fly a heading of about 90 degrees. You will need to fly for 5-10 minutes before the mountain comes into view. Be patient if you don't see it right away, it will dwarf everything in it's vicinity. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-WA20.png|thumb|right|Latitude: 46.87588502 Longitude: -122.25733500]]&lt;br /&gt;
&lt;br /&gt;
* [[WA20|WA20 - Swanson]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/WA20.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:WA20-007.png|thumb|left|external near view]] &lt;br /&gt;
[[Image:WA20-009.png|thumb|right|external near view]] &lt;br /&gt;
* [[mosquito]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=WA20 --aircraft=mosquito&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Death Valley Tour==&lt;br /&gt;
[[Image:L06-001.png|thumb|left|in the air]]&lt;br /&gt;
[[Image:Furnace-creek.jpg|thumb|left|real life view of Furnace Creek Airfield]]&lt;br /&gt;
[[Image:L06-002.png|thumb|right|in the air]] &lt;br /&gt;
Furnace Creek, CA. This starts you right in the middle of Death Valley which runs north &amp;amp; south. If you head south about 15 miles you'll hit the lowest point in the USA, 282 feet (86 meters) below sea level.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-L06.png|thumb|right|Latitude: 36.46451100 Longitude: -116.88139422]]&lt;br /&gt;
* [[L06|L06 - Furnace Creek]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/L06.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:L06-003.png|thumb|left|in the air]] &lt;br /&gt;
[[Image:L06-004.png|thumb|right|in the air]] &lt;br /&gt;
* [[rallye-MS893]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=L06 --aircraft=rallye-MS893&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utah==&lt;br /&gt;
!!! Work in progress !!!&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Image:6WA8-002.png|thumb|left|landing 1]]&lt;br /&gt;
[[Image:6WA8-008.png|thumb|right|landing 2]] &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Escalante Muni Airport, Escalante, UT. This airport is east and a bit north of Bryce Canyon National park. If you head mostly south and a bit east you'll eventually hit the Grand Canyon. It is sandwiched between the Dixie National forest to the north and the Grand Staircase-Escalante National Monument to the south. There should be interesting stuff to see no matter which direction you head.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-1L7.png|thumb|right|Latitude: 37.75054400 Longitude: -111.57578300]]&lt;br /&gt;
* [[1L7|1L7 - Escalante Muni]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/1L7.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
	[[Image:6WA8-009.png|thumb|left|landing 3]] &lt;br /&gt;
* [[Piper PA-18 Super Cub|pa 18]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=1L7 --aircraft=pa18&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lake County Airport (CO)==&lt;br /&gt;
[[Image:KLXV-001.png|thumb|left|Adjust mixture !]]&lt;br /&gt;
[[Image:KLXV-002.png|thumb|right|The terrain will be covered by snow]] &lt;br /&gt;
Lake County Airport, Leadville, CO. This airport is at an elevation of 9927 making it a bit of a challenge to get into and out of with a standard C172.&amp;lt;BR/&amp;gt;&lt;br /&gt;
Make sure you lean out your engine before taking off and read up on density altitude before you try this one in real life. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KLXV-003.png|thumb|left|The airport]]&lt;br /&gt;
[[Image:World-KLXV.png|thumb|right|Latitude: 39.22812500 Longitude: -106.31835600]]&lt;br /&gt;
* [[KLXV|KLXV - Lake Co]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KLXV.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w110n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KLXV-004.png|thumb|left|I like this panorama]] &lt;br /&gt;
[[Image:KLXV-005.png|thumb|right|The nearby lake]] &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
[[Image:KLXV-006.png|thumb|left|Landing...]] &lt;br /&gt;
 fgfs --airport=KLXV --aircraft=c172p&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caribbean - Saint Martin and St. Kitts== &lt;br /&gt;
[[Image:TNCM-003.png|thumb|left|just after the take off]]&lt;br /&gt;
[[Image:TNCM-004.png|thumb|right|some nearby island]] &lt;br /&gt;
Pilots of the Caribbeans is an informal FlightGear community of users who fly around the small Caribbean islands, many of which have custom scenery and improved landclass data. (For details see [[Pilots of the Caribbean]])&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[TNCM|Princess Juliana International Airport (TNCM)]] at the isle of Saint Martin, is one of the most popular airports in FlightGear. In large part due to the custom objects and land cover. However, St. Marten is only one of several detailed airports in the region - and, while the approach for TNCM is one of the most memorable in the whole world, the land cover for St. Kitts and Nevis makes it a lovely place to fly.&lt;br /&gt;
&lt;br /&gt;
British Airways, US Airways and American Airlines, among others, all fly into St. Kitts' [[TKPK|Robert L. Bradshaw International Airport (TKPK)]] in real life.&lt;br /&gt;
&lt;br /&gt;
Take off from TKPK in a [[Piper_J3_Cub|Piper Cub]] and make a northward, clockwise circle of the island. Start your descent on the east side of the island, and focus on the small hill which separates the north from the south. Start hugging the coast near the beach and look to the west - as soon as the railroad heads to the southwest, you're about ready to turn for final. Make your right hand turn for final and taxi to the terminal.&lt;br /&gt;
&lt;br /&gt;
If you want to fully explore this whole country, take off in a Beaver, which has a little more speed, and fly a figure eight. Take off from TKPK and circle the airport to the north like in the Cub. Then instead of landing, perform a touch-and-go and turn left over the boat terminal and make for the west coast of Nevis. Enjoy the beauty of the south coast of St. Kitts before circling Nevis. Over Nevis, you have several options - cut your flight short and land at [[TKPN]] on the island of Nevis, complete the &amp;quot;figure eight&amp;quot; by heading back to TKPK, or check your fuel and head east across the Caribbean to Antigua (which does not have custom land cover).&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
Check out the [[Pilots of the Caribbean]] page, for further informations.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-TNCM.png|thumb|right|Latitude: 18.040953 Longitude: -63.108900]]&lt;br /&gt;
&lt;br /&gt;
* [[TNCM|TNCM - Princess Juliana International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TNCM.pdf chart] &lt;br /&gt;
* [[TKPK|TKPK - Robert L. Bradshaw International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPK.pdf chart] &lt;br /&gt;
* [[TKPN|TKPN - Vance Winkworth Amory Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPN.pdf chart] &lt;br /&gt;
others interesting airports in the area:&lt;br /&gt;
* [[TFFF|TFFF - Le Lamentin]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFF.pdf chart]&lt;br /&gt;
* [[MDPP|MDPP - Gregorio Luperon Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/MDPP.pdf chart]&lt;br /&gt;
* [[TJSJ|TJSJ - Luis Munoz Marin Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TJSJ.pdf chart]&lt;br /&gt;
* [[FMEE|FMEE - St Denis Gillot]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/FMEE.pdf chart]&lt;br /&gt;
* [[TFFG|TFFG - Grand Case]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFG.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: &lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w070n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n20.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w090n20.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:TNCM-005.png|thumb|left|amazing]]&lt;br /&gt;
[[Image:TNCM-006.png|thumb|right|landing]] &lt;br /&gt;
* [[Piper_J3_Cub|Piper Cub]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=TKPK --aircraft=Cub&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
[[FlightGear Newsletter January 2011]] by [[User:Statto|Statto]], format and extended by [[User:Francescobrisa|Francescobrisa]].&lt;br /&gt;
&lt;br /&gt;
==Friedman Memorial Airport (Idaho)==&lt;br /&gt;
[[Image:KSUN-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:KSUN-002.png|thumb|right|nearby]] &lt;br /&gt;
Friedman Memorial Airport, Hailey, Idaho. This airport is nestled in a valley surrounded by significant terrain. It's one that shows up quite often in accident investigations. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KSUN.png|thumb|right|Latitude: 43.51223900 Longitude: -114.30376100]]&lt;br /&gt;
* [[KSUN|KSUN - Friedman Mem]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KSUN.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSUN-003.png|thumb|left|landing]]&lt;br /&gt;
[[Image:KSUN-004.png|thumb|right|landing]] &lt;br /&gt;
* [[FK9MK2]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KSUN --aircraft=fk9mk2&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wyoming - Grand Teton ==&lt;br /&gt;
Jackson Hole (KJAC) airport is located at around 6,400ft right next to the Teton range of mountains. The Tetons rise straight out of the plains, gaining over 5,000ft in 2 miles. &lt;br /&gt;
&lt;br /&gt;
You will need the w120n40 scenery.&lt;br /&gt;
&lt;br /&gt;
Tower frequency at KJAC is 118.07. Due to the high altitude, you will need to lean non-turbocharged piston aircraft before take-off. Don't forget that take-off distances will also be longer.&lt;br /&gt;
&lt;br /&gt;
After take-off head to the North East. Grand Teton is the highest of the three peaks that rise straight from the flat-lands. Follow the line of mountains to the East, passing over Jenny Lake. After a couple of miles you will reach a huge lake. The large bulk of a mountain to the East is Mount Moran.&lt;br /&gt;
&lt;br /&gt;
The Teton Mountain range is surprisingly thin - really just a string of mountains running SW-NE. Flying fast jets down the steep valleys is recommended.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
== Virginia Eastern Shore, Chesapeake Bay-Bridge Tunnel Sightseeing ==&lt;br /&gt;
[[Image:KTGI-001.png|thumb|left|before take off]]&lt;br /&gt;
[[Image:KTGI-002.png|thumb|right|right after take off]]&lt;br /&gt;
&lt;br /&gt;
Take a short VFR trip from Tangier Island to view the famous Chesapeake Bay Bridge-Tunnel connecting Cape Charles to Cape Henry. Depart historic Tangier Island (KTGI) situated in the Chesapeake Bay and land at Norfolk International Airport (KORF), Norfolk, Virginia. The scenic character of the flight is enhanced by leaving the island at dusk. The flight is both scenic and challenging. Frequently, when flying with real weather, you will have a steady wind blowing across the bay. Starting out quiet Tangier and arriving at busy, glittering Norfolk International (KORF) gives the flight some contrast.&lt;br /&gt;
&lt;br /&gt;
'''fgfs --airport=KTGI --runway=20 --timeofday=dusk'''&lt;br /&gt;
&lt;br /&gt;
Before leaving Tangier: Set your altimeter to the prevailing barometric temperature. Set your communications radio to the Norfolk Intl. (KORF) ATIS frequency of 127.150 MHz to listen for weather reports in the destination area. Set your navigation radio to 112.20 MHz to pick up the Cape Charles (CCV) VOR. Set your heading bug to the runway heading, 200.&lt;br /&gt;
&lt;br /&gt;
Takeoff straight, flying the runway heading. Climb to 2000ft and maintain.&lt;br /&gt;
&lt;br /&gt;
Shortly, you should see the VOR assigned to NAV1 display receive a steady signal (the OFF flag will disappear). The DME should also settle down and display the distance to the Cape Charles VOR station. The flight to CCV will be about 26 nautical miles. As you fly, it will show your airspeed and time to arrival. It should take about ten minutes.&lt;br /&gt;
&lt;br /&gt;
Turn the OBS knob until the VOR displays the TO flag and 190 degrees, the heading you should now turn to.&lt;br /&gt;
&lt;br /&gt;
Fly south from Tangier, crossing an expanse of water, about ten miles until you see the Virginia Eastern Shore. You'll come upon the grass airstrip of Chance (VA89) a few minutes out from Tangier. Beyond are two flashing tower beacons. You may catch a glimpse of Weirwood/Kellam (W08) on the ocean shore, recognizable by two crossing dirt strips.&lt;br /&gt;
&lt;br /&gt;
If you look carefully, you may see the little white building that is the Cape Charles VOR station. As you fly over VOR the flag will change from TO to FROM and the needle will deflect. Do not try to follow the needle. Wait until you are past the VOR. As you cross the VOR station, you should see a highway slanting across your path toward the south west. Turn to follow this highway. You'll come across a lone tower with beacon along the roadside. You'll see an access road stretching from the tower complex to the main road.&lt;br /&gt;
&lt;br /&gt;
If the sky conditions permit, you may try your hand at wayfinding by following the road. If visiblity is poor, set the VOR to 180 degrees to parallel the road to the end of the peninsula. Or you can continue to fly outbound from the VOR on 190 by maintaining the same heading. The VOR needle should return to center with the FROM flag displaying. This will put you west of the bridge with a good view and the option to turn towards KORF near the initial approach fix. If you follow the highway you will need to overfly the airport, but if you stay on the 190 heading, you will be in a position to make a straight in landing.&lt;br /&gt;
&lt;br /&gt;
As you fly down the peninsula you'll pass Cherrystone, Eagle's Nest, Scott and Bull Farm grass airstrips. Bull Farm is the last strip before the mouth of the Chesapeake. Just past Scott Farm you should see the first glimmer of the northern leg of the bridge. The grass strips can be very difficult to see.&lt;br /&gt;
&lt;br /&gt;
As you reach the end of the peninsula, be careful to avoid the tower on Fisherman's Island at the north end of the north leg of the bridge (Note the bridge is not modeled by FlightGear...but I hope to work up one eventually). Next comes the north middle leg. Turn right a few degrees to follow the south middle leg. Watch as the deck plunges beneath the waves to allow ships to navigate the north and south channels.&lt;br /&gt;
&lt;br /&gt;
As Cape Henry approaches, you'll see the Norfolk International airport to the right and the southern leg of the bridge touching the shore.&lt;br /&gt;
&lt;br /&gt;
If you intend to land at KORF, you will want to start your approach soon. Otherwise, you may continue to follow the bridge to the end. Make the approach to KORF by contacting the tower for vectors. Or use the ILS.&lt;br /&gt;
&lt;br /&gt;
This is a good flight to practice VOR flying on. It is a very straight flight path to the VOR requiring little adjustment and there are no other VORs in the area to confuse you.&lt;br /&gt;
*June 2006 by [[User:Sek|Sek]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KTGI.png|thumb|right|Latitude: 37.8250835 Longitude: -75.9976665]]&lt;br /&gt;
* [[KTGI|KTGI - Tangier Island]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KTGI.pdf chart]&lt;br /&gt;
* [[KORF|KORF - Norfolk International]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KORF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w80n30.tgz&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KTGI-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:KORF-001.png|thumb|right|landing to KORF]]&lt;br /&gt;
I have tried this trip using a Seneca II&lt;br /&gt;
* [[Piper PA34-200T Seneca II]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KTGI --runway=20 --timeofday=dusk  --aircraft=SenecaII&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prince George to Calgary Springbank==&lt;br /&gt;
A beautiful flight is from Prince George (CYXS), to Calgary Springbank (CYBW). Route created by reed, which can be seen at {{forum link|t=9772|text=the forums}}&lt;br /&gt;
*Published in [[FlightGear Newsletter November 2010]] By [[User:Cael|Cael]].&lt;br /&gt;
==Ketchikan to Juneau==&lt;br /&gt;
It's cold where we will go so dress up warm and if we are lucky we might see whales during our flight. Don't fly too high to enjoy the amazing views, and there is a small challenge at the end. The runways we will use are long enough for bigger aircraft (7000+). Total length of the trip will be around 245 NM. So, hop in the cockpit of your favourite airliner.&lt;br /&gt;
&lt;br /&gt;
Alaska, here we come! Enjoy!&lt;br /&gt;
#Park your aircraft on PAKT, [http://www.borough.ketchikan.ak.us/airport/airport_history.htm Ketchikan International], runway 11. The wind is coming from '''South''', change the weather if needed (SE is ok too). &lt;br /&gt;
#Fly North towards [[NDB]] Fredericks Point on 372.0 for 94 NM. &lt;br /&gt;
#Fly towards [[NDB]] Five Fingers on 295.0 for 39 NM. &lt;br /&gt;
#Fly towards [[NDB]] Gustavus on 219.0 for 77 NM. &lt;br /&gt;
#Fly towards [[NDB]] Coghlan Island on 212.0 for 32 NM.&lt;br /&gt;
#Set the [[ILS]] on 109.9 and land your aircraft (after 4 NM) on PAJN, [http://www.juneau.org/airport/ Juneau International], runway 08.&lt;br /&gt;
If you feel warm after this landing, you just crossed a NORAD microwave site, so that is why.&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]] [[FlightGear Newsletter November 2011]]&lt;br /&gt;
==Searching Wizard Island==&lt;br /&gt;
*USA, Oregon, Klamath County&lt;br /&gt;
With one [[VORTAC]] behind our back we do an [[IFR]]/[[VFR]] search of Wizard Island, a mysterious place, a sacred place for native Americans. You might even find the &amp;lt;tt&amp;gt;Old Man of the Lake&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Don't pull up the map, that would spoil the surprise but I promise '''unique views'''. We will land on a short lawn runway. Terrain [[altitude]] will range from 4,000 to a max of 8,930 feet and down again. Total length of the trip will be about 50 NM. Select your aircraft with care. It must have one working navigational radio (VOR-DME), a strong engine, a strong undercarriage, must be capable of a good climb and a steep descend. I suggest to use Fair weather (Environment=&amp;gt;Global Weather). If needed remove some clouds (View=&amp;gt;Rendering Options=&amp;gt;Slider 3d Clouds to the left).&lt;br /&gt;
[[File:Mount Scott.jpg|thumb|250 px|Mount Scott (8,929 feet) just after depart from 2S7 (Two Sierra Seven). Wizard Island is just to the North-West of it.]]&lt;br /&gt;
*Park your aircraft on 2S7 (Two Sierra Seven), Chiloguin-State.&lt;br /&gt;
*Set [[NAV1]] on 115.9 (Klamath Falls VORTAC) and on radial 323&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magnetic). We are at an [[elevation]] of 4,217 feet. Set QNH. Set heading bug at 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn).&lt;br /&gt;
*Take off an fly the course set with the heading bug.&lt;br /&gt;
*Intercept the radial.&lt;br /&gt;
*Monitor distance and you will find Wizard Island at 50 NM from Klamath Falls. The island has an elevation of 6,673 feet. I suggest a full 360&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; turn, take pictures.&lt;br /&gt;
*Set radial 318&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt;, keep the same frequency. Do a new radial intercept.&lt;br /&gt;
*Try and find the airstrip (3S6, Three Sierra Six, Toketee-State) at 71 NM from Klamath Falls with an elevation of 3,361 feet, runway heading 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn). There are bumps around you should avoid.&lt;br /&gt;
*If you are capable of finding the island, finding the airstrip and landing without a crash, in one go..., you are a wizard.&lt;br /&gt;
&lt;br /&gt;
Click [http://en.wikipedia.org/wiki/Crater_Lake this link] '''after''' you have landed so you know what amazing landscape you have seen.&lt;br /&gt;
&lt;br /&gt;
*December 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter March 2012]].&lt;br /&gt;
&lt;br /&gt;
=South America=&lt;br /&gt;
==Southern Tip of Chile==&lt;br /&gt;
[[Image:Scgz-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:Scgz-004.png|thumb|right|Some part of the scenery]]&lt;br /&gt;
Gary Carvell: Here is a suggestion for the FlightGear Places to Fly page. I don't have any particular routes, just fly around and enjoy the gorgeous scenery.&amp;lt;BR/&amp;gt;&lt;br /&gt;
These three airports are in the same region of the very southern tip of Argentina. This area is a scenic wonderland - a maze of islands, mountains, and ocean channels. Hours of entertainment.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SCGZ - Puerto Williams Guardiamarina Zanartu Airport, Chile Located on the north coast of Isla Navarino facing the Beagle Channel. At 55 deg S. longitude, Puerto Williams is considered the southernmost town in the world.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SAWH - Ushuaia Islas Malvinas Airport&lt;br /&gt;
SAWO - Ushuaia Est Aeronaval Airport&lt;br /&gt;
Ushuaia, on the south coast of Isla Grande de Tierra del Fuego, on the the Beagle Channel.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:Sawh-004.png|thumb|left|Approaching Ushumaia Malvinas Argentinas]]&lt;br /&gt;
[[Image:World-scgz.png|thumb|right|Latitude: -54.931072 Longitude: -67.626261]]&lt;br /&gt;
&lt;br /&gt;
* [[SCGZ|SCGZ - Guardiamarina Zanartu]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SCGZ.pdf chart]&lt;br /&gt;
* [[SAWH|SAWH - Ushuaia Malvinas Argentinas]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWH.pdf chart]&lt;br /&gt;
* [[SAWO|SAWO - Ushuaia Est Aeronaval]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWO.pdf chart]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:Scgz-002.png|thumb|left|Just left the scgz airport]]&lt;br /&gt;
I personally like to fly this area in the [[Consolidated_Aircraft_PBY_Catalina|Catalina]], it's a great sightseeing plane with the advantage that you can take off and land just about anywhere. &lt;br /&gt;
* [[Consolidated_Aircraft_PBY_Catalina|Catalina]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SCGZ --aircraft=Catalina&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Copacabana to San Rafael over Lake Titicaca==&lt;br /&gt;
Bolivia to Peru. This trip will lead you over one of the highest and deepest lakes in the world towards the highest airfield in the world. It a demonstration of a [[IFR]] flight towards a fix and a demonstration how accurate FlightGear simulates air density and the effects it has on aircraft.&lt;br /&gt;
[[File:Slcc-sprf.jpg|thumb|200px|left|Flight and fix SLCC to SPRF]]&lt;br /&gt;
Place your aircraft on the airfield [http://en.wikipedia.org/wiki/Copacabana,_Bolivia SLCC, Copacabana], with an [[elevation]] of 12,592 feet. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M). &lt;br /&gt;
&lt;br /&gt;
We will fly towards and land at SPRF. If you would enter SLCC and SPRF in [[Kelpie]] planner you probably would not be able to find SPRF. To find SPRF I am adding an additional VOR-DME station and for a good fix give you another VOR-DME. Try Kelpie planner to plan this route and compare with this suggestion.&lt;br /&gt;
&lt;br /&gt;
Equipment preparation. Set [[NAV1]] to [http://en.wikipedia.org/wiki/Juliaca Juliaca] VOR-DME on 155.55 with a radial of 311° (magnetic). Set [[NAV2]] to Arequipa VOR-DME on 113.7 with a radial of 212°. During our flight we will fly with [[true altitude]] as set with [[QNH]], keep QNH updated. Arm the autopilot with the [[heading bug]] at 311° and an initial altitude of 13,500 feet.&lt;br /&gt;
&lt;br /&gt;
Take off and if you took the wrong RW pull up hard. Take a small tour over [http://en.wikipedia.org/wiki/Titicaca lake Titicaca], see the floating islands and try to find the lost golden treasure. Intercept the nearest radial on NAV1 towards Juliaca (about 311°). &lt;br /&gt;
&lt;br /&gt;
Just before Juliaca is a hill so while on lake Titicaca increase altitude to 14,200 feet, the [[VFR]] part of this trip is over. After passing Juliaca set the radial of NAV1 to 352° and set the altitude to 17,422 feet. We will fly from NAV1 and slowly increase altitude.&lt;br /&gt;
&lt;br /&gt;
At a distance of about 60 NM set the heading bug on the current course. Monitor the distance to NAV1, the radial of NAV2 and the distance to NAV2. At a distance of 74.5 NM to NAV1, a distance of 140.7 NM and at the '''radial''' intercept of NAV2 should be the runway. So, from 60 NM onwards, look outside the window, then at NAV1 and then NAV2 etc.&lt;br /&gt;
&lt;br /&gt;
If you are at 80NM to NAV1 you have missed the airfield but you still won't hit any hills (unless you bank left). Bank right and set the heading bug to 172°. Fly back towards NAV1 and intercept the radial 352° at about 50NM again to repeat the search.&lt;br /&gt;
&lt;br /&gt;
The runway SPRF, San Rafael, has a elevation of 14,422 feet and a heading of 297°/ 117°. Our initial altitude has been set 3,000NM above the RW elevation. That should give sufficient room for navigation.&lt;br /&gt;
&lt;br /&gt;
After you have seen the airfield set the radial of NAV1 to 297°, the heading of the runway (not the course to the runway) as a visual aid. Land on RW 30 (and not on RW 12 unless you are a show-off). Oh, there is a small hill in front of RW 30, just so you know.&lt;br /&gt;
&lt;br /&gt;
Decreasing speed at this altitude can be a bit tricky. The air is thin and does not give much resistance. Next to that, the difference between [[indicated airspeed]] and [[ground speed]] is very noticeable. The ground speed is much higher as the indicated airspeed.&lt;br /&gt;
&lt;br /&gt;
After a successful landing, try to discover the origin of the Amazon river since we are now at the starting point of that trip.&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]], published in [[FlightGear_Newsletter_February_2012#Suggested_flights| Newsletter February 2012]].&lt;br /&gt;
&lt;br /&gt;
==Origin of the Amazon River==&lt;br /&gt;
[[Image:SPRF-001.png|thumb|left|high altitude]]&lt;br /&gt;
[[Image:SPRF-002.png|thumb|right|high altitude]] &lt;br /&gt;
Peru. For this [[IFR]] tour (with [[VFR]] parts) we take off from the highest airfield in the world to discover the origin of the [http://en.wikipedia.org/wiki/Amazon_River Amazon river] in South America. I promise spectacular mountains and valleys. The total length of this trip is about 175 NM.&lt;br /&gt;
&lt;br /&gt;
Place your aircraft on the airfield SPRF, San Rafael. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M).&lt;br /&gt;
&lt;br /&gt;
Equipment preparation: Set [[NAV1]] to [http://en.wikipedia.org/wiki/Arequipa Arequipa] VOR-DME at 113.7 with a radial of 176° (magnetic). Set [[NAV2]] to [http://en.wikipedia.org/wiki/Cusco Cusco] VOR-DME at 114.9 also with a radial of 176°.&lt;br /&gt;
Set [[QNH]] and during flight keep correcting it, it's a bad idea to use [[Pressure altitude]] during this flight. Set the [[heading bug]] to 250°. Arm the [[autopilot]] and set the initial [[altitude]] to 16,000 feet.&lt;br /&gt;
&lt;br /&gt;
The airfield SPRF, San Rafael has an [[elevation]] of 14,422 feet. That altitude will cause problems during take-off. It takes a lot longer for the aircraft to gain sufficient speed for take-off, also the take-off speed that is needed is higher as you would expect. Perhaps an additional notch of flaps is needed.&lt;br /&gt;
&lt;br /&gt;
Take-off, avoid the bumps (there are plenty) and fly a course of 250°. After about 80 NM you will fly over the radial of NAV1. Intercept the radial towards Arequipa. At a distance of 75 NM towards NAV1 you will have to increase altitude to 19,000 feet. &lt;br /&gt;
&lt;br /&gt;
At a distance of 50 NM towards NAV1 and 118 NM from NAV2 you will see and cross over the mountain [http://en.wikipedia.org/wiki/Nevado_Mismi Nevado Mismi] with an altitude of 18,362 ft. The rains and water on the area to the right until Nevado Mismi will leave towards the Atlantic ocean through the Amazon river. Anything to the left and after Nevado Mismi will leave towards the Pacific ocean.&lt;br /&gt;
&lt;br /&gt;
After Nevado Mismi you are tempted to descend. Don't. Just before the airfield is [http://en.wikipedia.org/wiki/Chachani Mt.Chachani] with an altitude of 19,872 feet and to the East is the active volcano [http://en.wikipedia.org/wiki/El_Misti El Misti] with an altitude of 19,101 feet. You can either increase the altitude and fly over the airfield or keep the altitude, even descend and fly between the mountains, your choice depends on the visibility.&lt;br /&gt;
&lt;br /&gt;
Fly using the heading bug and set NAV1 to [[ILS]] 109.7 with a radial of 93.2°. We will land at airfield [http://en.wikipedia.org/wiki/Rodr%C3%ADguez_Ball%C3%B3n_International_Airport SPQU, Rodriguez ballon], that has an elevation of 8,405 feet. There is a reason this airfield has just one ILS. The area South-West of the airfield is below 11,405 feet and is safe to navigate.&lt;br /&gt;
&lt;br /&gt;
Position the aircraft in front of the runway at an altitude of 11,405 feet, catch the [[glidescope]] at a distance of 9.5 NM and land your aircraft. After landing and parking your aircraft crawl into the tower to look around.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter May 2012]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:SPQU-001.png|thumb|left|pre - landing]]&lt;br /&gt;
[[Image:World-SPRF.png|thumb|right|Latitude: -14.267 Longitude: -70.467]]&lt;br /&gt;
* [[SPRF|SPRF - San Rafael]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPRF.pdf chart]&lt;br /&gt;
* [[SPQU|SPQU - Rodriguez Ballon]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPQU.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w020s80.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:SPQU-002.png|thumb|right|landed]] &lt;br /&gt;
I recomend a powerful jet angine airplane, but not too heavy !&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SPRF --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Middle East=&lt;br /&gt;
==Israel to Jordan over the Dead Sea==&lt;br /&gt;
[[Image:LLBS-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LLBS-002.png|thumb|right|flat land]] &lt;br /&gt;
Dead Sea is the lowest water elevation on the Earth. Take off from the Beer-Sheva Teyman airport and head East-North-East. About half way there, after the southern Hebron mountains ridge, there'll be a sharp drop-off down to the Dead Sea --- the lowest exposed point on the Earth.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It's really fun to descend and explore the beautiful coastline. In the real life, you wouldn't like to fly low over this water there of your own will --- while you don't need a life vest in the Dead Sea, the water is pretty caustic there for one's eyes. Once you're done marvelling the sights, continue on to the Queen Alia airport. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LLBS-006.png|thumb|left|landing in the dead sea, notice the altitude !]]&lt;br /&gt;
[[Image:OJAI-007.png|thumb|right|landing at Queen Alia Intl.]] &lt;br /&gt;
[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]&lt;br /&gt;
* [[LLBS|LLBS - Teyman]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LLBS.pdf chart]&lt;br /&gt;
* [[OJAI|OJAI - Queen Alia Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/OJAI.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/e030n30.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:LLBS-003.png|thumb|left|approaching the dead sea]]&lt;br /&gt;
[[Image:LLBS-004.png|thumb|right|there is also a minor airport]] &lt;br /&gt;
* [[Albatross]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LLBS --aircraft=Albatross&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Europe=&lt;br /&gt;
==Edinburgh to Oban==&lt;br /&gt;
See article: [[Edinburgh to Oban]].&lt;br /&gt;
&lt;br /&gt;
==Oban to Prestwick==&lt;br /&gt;
The west coast of Scotland offers some stunning scenery and a number of small airfields and airports to land at on both the mainland and the small islands the dot the coast. The distances between the various airfields are quite small, and some of the runways are on the short side, so STOL or GA aircraft are ideal. The tour suggested here follows part of a microlight trip I made this month, photos of which can be found [http://www.nanjika.co.uk/photos/gigha/ here].&lt;br /&gt;
&lt;br /&gt;
Oban airport (EGEO) lies on the west coast of Scotland, and offers fuel (both AVGAS and AVTUR) and a North/South tarmac runway.&lt;br /&gt;
&lt;br /&gt;
From Oban it is just a 10 minute flight west to the grass airfield of Glenforsa (EG45), on the north-east coast of the island of Mull. Due to the hills and water channel, this airfield often gets quite strange wind patterns - the weather can be perfect in Oban, but much gustier and windier at Glenforsa. At times the windsocks at either end of the runway can blow in completely opposite directions!&lt;br /&gt;
&lt;br /&gt;
Some distance north of Oban lie the airfields of the Isle of Skye (EG57) and Plockton (EG81). This is an excellent place from which to explore the mountains of the Isle of Skye, known as the Cuilins.&lt;br /&gt;
&lt;br /&gt;
Heading south from Oban, one can follow the coast to the island of Jura, with it's distinctive hills (The Paps of Jura). From Jura one can head south to the island of Islay with its numarous malt whisky distilleries (many of which are modelled in FG). Islay Airport (EGPI) has extensive runways. From Islay head north east to the tiny island of Gigha. Despite it's small size, it too has an airfield (EG44), though the FG version is tarmac rather than grass.&lt;br /&gt;
&lt;br /&gt;
From Gigha head east over the Mull of Kintyre, to the hilly isle of Arran, then north east to the Isle of Bute. Both islands have very small grass airstrips, which are sadly not present in FG. From Bute you can head south east to Prestwick International (EGPK), famous for being the only place Elvis touched down in the UK, and a fine place to end our tour.&lt;br /&gt;
*Published in [[FlightGear Newsletter July 2011]] by [[User:Stuart|Stuart]]&lt;br /&gt;
&lt;br /&gt;
== Edinburgh to Dundee ==&lt;br /&gt;
Edinburgh Airport (EGPH) is located to the West of the city of Edinburgh and south of the Forth rail and road bridges. You'll need the w010n50 scenery and the latest set of objects from the scenery DB which include a number of models for the Edinburgh area.&lt;br /&gt;
&lt;br /&gt;
From Edinburgh Airport, head north and circle the bridges, then follow the coast on the south eastwards past Edinburgh (watch out for the Castle!) and to East Lothian and Bass Rock - a volcanic plug in the sea that is host to thousands of sea-birds.&lt;br /&gt;
&lt;br /&gt;
There are a number of sights in East Lothian, include a distillery.&lt;br /&gt;
&lt;br /&gt;
If you wish to continue your tour, head back North, crossing the Firth of Forth to the Kingdom of Fife. Head approximated North West, tracking towards the Perth VOR (110.4). There is an airport here (Perth Scone, EGPT), but instead we will now track out on the 090 radial and pick up the ILS to Dundee Airport (108.10) landing beside the sea.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
==Austrian alps soaring==&lt;br /&gt;
Using the AI subsystem, discover the Austrian alps with a glider. [[Pinzgauer Spaziergang]]&lt;br /&gt;
&lt;br /&gt;
== Sightseeing the Alps in a C172 ==&lt;br /&gt;
This tour will guide you to many of the most famous mountains, valleys, glaciers, snowfields, winter and summer vacation areas, etc. in the European Alps. In addition there are several hints to visit nearby areas of interest. On the tour you will visit Switzerland, Italy and France.&lt;br /&gt;
See the detailed description in: http://www.emmerich-j.de/FGFS/Alp-flying.pdf (mirrored to https://beni.hallinger.org/fgfs.nobackup/Alp-Tour-Jomo/)&lt;br /&gt;
*February 2011 by [[User:Jomo|Jomo &amp;amp;dagger;]].;&lt;br /&gt;
&lt;br /&gt;
* The scenic trip does take about 2 hours.&lt;br /&gt;
* Skyvector route: https://skyvector.com/?ll=46.464097146192884,7.159790050777061&amp;amp;chart=301&amp;amp;zoom=6&amp;amp;fpl=%20LSZC%204700N00836E%204647N00840E%204642N00836E%204637N00835E%204634N00823E%204634N00812E%204633N00809E%204634N00805E%204634N00801E%204631N00803E%204624N00746E%204619N00745E%204618N00753E%204614N00752E%204612N00749E%204609N00747E%204603N00746E%204601N00745E%204600N00738E%204555N00724E%204555N00712E%204553N00703E%204547N00652E%204549N00649E%204604N00634E%20LSGG&lt;br /&gt;
&lt;br /&gt;
== Salzburg to Zell am See via Hallstatt ==&lt;br /&gt;
[[File:LOWS-LOGO-LOWZ.jpg|thumb|The route for Salzburg to Zell am See via Hallstatt]]&lt;br /&gt;
This flight will bring you around a very scenic region of the austrian alps.&lt;br /&gt;
* [https://skyvector.com/?ll=47.5666119817603,13.107925427128999&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A040%20LOWS%204735N01311E%204736N01339E%204733N01340E%204733N01343E%204735N01343E%204738N01355E%204727N01357E%20LOWZ SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 1 hr. air time at 120 KTAS.&lt;br /&gt;
* Fly at an altitude of about 4000ft or so (the entire trip can be done at that altitude safely).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start ''Salzburg (LOWS)''; follow the Autobahn in the valley to the southeast until you reach the fork at ''Golling''. To the south you see the Mountains of the ''Tennengebirge''.&lt;br /&gt;
* Alternatively (and I recommned that), you can also deviate sothwest around ''Mt. Untersberg'' (1972m, hosting germanys longest and deepest cave, the ''Riesending'') to visit lake ''Königsee'' and watch the peaks of the ''Steinernes Meer'' (the dominant and very famous ''Mt. Watzmann'', 2713m!) and north side of the ''Mt. Hochkönig''. You need to climb to at least 6200ft to cross the final ridge at the end of the lake valley. After crossing, descend to 4000ft, follow the valley and fly north at the next valley to rejoin the route.&lt;br /&gt;
* Turn east and follow the valley and hills, aim for a prominent V-shaped incision at the end. Fly through there and you suddenly break out at the lake ''Hallstätter See'', a fjord-like lake 125m deep.&lt;br /&gt;
* Follow the ''Hallstätter See'' to the south, on its western shore is the famous town of ''Hallstatt''. At the mountain to your right (north of Hallstatt) is a very old settlement dating back to the late bronce age (Hallstattzeit, c. 800–450 BC) and there was a very important Salt mine dating back to that time and important archeological grave findings.&lt;br /&gt;
Looking south you can see the ''Dachstein'' (2995 m), a high peak hosting the ''Hirlatzhöhle'', with 120km the twentiest longest and with 1560m sixth deepest cave of planet earth.&lt;br /&gt;
* Follow the valley east bend to ''Obertraun'', and then north over the ''Koppenpass'' and the town of ''Bad Aussee''.&lt;br /&gt;
* From ''Bad Aussee'', fly straight to the lakes ''Grundlsee'' and ''Toplitzsee'' (you can't see the latter yet).&lt;br /&gt;
* Between the two, turn southwards and aim for the reservoir lake ''Salza'' which is in the sharp incision you can see to the south.&lt;br /&gt;
* After passing the reservoir, you may try to get down to ''Niederoblarn'' (LOGO) to the southeast, it's a short airfield.&lt;br /&gt;
* From there, follow the railway in the valley of Enns westwards, LOWZ is about 20 minutes away. On your right side watch out for the other side of the ''Dachstein'' and the town of ''Schladming'', which lies down in the valley next the rocky hills with the river flowing trough. Look for the railway and the river Enns.&lt;br /&gt;
* Behind ''Schladming'' (south of Mt. ''Dachstein'', approximately halfway of the distance LOGO/LOWZ) the valley will widen a bit again, featuring a rocky mountain in the middle of the valley. Continue to follow the railway and river bending nortwest arond the small mountain.&lt;br /&gt;
* Near the bigger town of ''Radstadt'' the valley will open significantly. Follow west, heading for the next town ''Altenmark'' at the end of the opening.&lt;br /&gt;
* The railway will bend north at ''Altenmark'' and soon join the Autobahn A10/E55. This is the point we need to go southwest and follow the next valley.&lt;br /&gt;
* The valley leads us westward to the Town of ''St. Johann/Pongau''. probably around the middle of the valley you can spot the prominent ''Mt. Hochkönig'' (2941m) northwest of ''St. Johann'' and the ''Tennengebirge'' to its right.&lt;br /&gt;
* Once reaching ''St. Johann'', continue to follow the next big valley west-southwest.&lt;br /&gt;
* After about 16 miles you will reach ''Zell am See'' (LOWZ) where we will land after around one hour flight time in total. Beware this is a short field.&lt;br /&gt;
&lt;br /&gt;
== Zell am See to Innsbruck via Mt. Venediger ==&lt;br /&gt;
[[File:LOWZ-LOWI.jpg|thumb|The route for Zell am See to Innsbruck]]&lt;br /&gt;
This flight will bring you to two of the core peaks of the Alpenhauptkamm.&lt;br /&gt;
* [https://skyvector.com/?ll=47.201656734623775,12.160079968084839&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A120%20LOWZ%20LOWZ%204708N01241E%204708N01221E%204706N01214E%204710N01152E%204724N01150E%20LOWI SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 45 minutes air time at 110 KTAS.&lt;br /&gt;
* Climb to at an altitude of about 10000ft or so after starting from [[:File:Lowz-parking.jpg|Zell am See]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After starting fly into the valley southwest over the town of ''Kaprun''. Maybe you need to circle a bit to gain altitude, near the mountains we need at least about 10000ft!&lt;br /&gt;
* Follow the valley until you overfly two lakes (''Stausee Wasserfallboden'' and ''Moorboden''). To your left you can see ''Mt. Großes Wiesbachhorn'' (3564m).&lt;br /&gt;
* The end of the valley goes over into a flank of the ''Großglockner'' which is near to the south. Follow the west bend of the valley end and fly over the lakes ''Tauernmoossee'' and ''Weißsee''. After you climb out of the valley, you already should see the peak of ''Mt. Venediger'' on the front left. Aim to the saddle right of its peak.&lt;br /&gt;
* You then fly that direction over several valleys that go from south to north, until you hit the very big valley that bend from south to west. The ridgeline right of that valley is the border between the Austrian states Tirol and Salzburg. Follow the valley up to the ''Venediger'', passing the ''Mt. Sandebentörl'' (2751m), still aiming for the saddle.&lt;br /&gt;
* Shortly after you reach the end of the valley and need to overfly the saddle with the glacier ''Venedigerkees'' behind it. The ridgeline is again the border between Tirol and Salzburg. Directly south of the ''Venedigerkees'' is the pyramid of ''Mt. Venediger''.&lt;br /&gt;
* Follow ''Venedigers'' ridge to the southwest, skip the first valley and overfly the next ridge.&lt;br /&gt;
* From here you can deviate into the valley north and visit the ''Krimmler Wasserfälle'', and from there west trough the main valley.&lt;br /&gt;
* If you instead follow the planned route westwards, aim to the peak of ''Mt. Zillerplattenspitze'' (3148m) with the small lake ''Eissee'' to its south flank which you should already see. This is a little hard to get right, but don't fly directly into the big valley but aim right to the second row mountain peaks at about 280 heading.&lt;br /&gt;
* Overfly the ridge with ''Eissee'' and follow the valley from there nothwest with the reservoir ''Zillergründl'' and ''Mt. Reichenspitze'' (3303m) to its right; until you reach the town ''Mayrhofen'' where the current valley meets the ''Zillertal'' valley. You also should start to descend now to about 3500ft with a rate of roughly -1000fpm.&lt;br /&gt;
* From ''Mayrhofen'' follow the ''Zillertal'' valley north and when reaching the ''Inntal'' valley near the town ''Jenbach'', Innsbruck Airport is a few minutes to the west. If you like, you can divert north at ''Jenbach'' to visit ''Achensee'', and even continue further north to land at Munich via lake ''Tegernsee'' or via the Isartal over ''Bad Tölz''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Crossing the alps ==&lt;br /&gt;
[[File:ED02-LIPB.jpg|thumb|The route for Fuessen to Bolzano]]&lt;br /&gt;
This trip brings us from germany via austria to italy, crossing the alps, visiting the famous castle Neuschwanstein and Mt. Zugspitze, germanys highest peak.&lt;br /&gt;
* [https://skyvector.com/?ll=47.068251080980836,10.959411633048108&amp;amp;chart=301&amp;amp;zoom=5&amp;amp;fpl=N01204735N01041E%204734N01045E%204729N01042E%204726N01046E%204724N01054E%204712N01054E%204704N01058E%204656N01103E%204655N01106E%204653N01109E%204650N01110E%204648N01113E%204638N01110E%20LIPB SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather and time (I suggest to start with the first light/sunrise).&lt;br /&gt;
* There are no helpful navaids for this trip, but Bolzano NDB: 362 BZO may serve as a final guidance.&lt;br /&gt;
* Trip takes around 45 minutes air time at 120 KTAS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start at ED02 Fuessen, climb to about 3000 and head southeast to visit castle Neuschwanstein, south of the Forgensee.&lt;br /&gt;
* After looking at the castle (challenge: fly close around behind it), we start climbing to 3500 and aim southwestish and cross over from germany to austria.&lt;br /&gt;
* Fly into the big valley directing south. East of Reutte start climbing 500fpm to 6000 and follow the railway in the valley to the southeast.&lt;br /&gt;
* Once the valley opens significantly, you can see the famous mountain Zugspitze (germanys highest peak, 2962 m) to the front.&lt;br /&gt;
* Head southwards around the Mt. Gartnerwand over town Ehrwald and fly between the two small peaks over the Marienbergjoch mountain pass, 1789m/5870ft (between Mt. Wanning and Mt. Marienberg; challenge: who can make it with the least altitude?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After overflying the second mountain, to the south comes a new valley called Ötzal where you fly into.&lt;br /&gt;
* Follow that valley all the way to the south and slowly climb to at least 8600 now (300fpm or so). Note overflying Längenfelden, where the dominant valley joins from the east with the river Fischbach, halfaway the leg; this looks similar to the end, but isn't.&lt;br /&gt;
* Follow the valley until it starts to branch in all different directions at the end (over the town of Sölden and Zwieselstein).&lt;br /&gt;
* We follow the Southeast main branch and then turn quickly to a smaller valley branching off directly eastwards (look for the mountain pass road).&lt;br /&gt;
* That brings us to the mountain pass of the Timmelsjoch and is the place where we cross over to Italy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After passing, we can descend to 2500 or so, following the terrain. Follow the valley and its river &amp;quot;Passer&amp;quot; southeast, and follow its bend to the south.&lt;br /&gt;
* Follow the valley and make a nice turn around Mt. Kolbenspitze's east ridge, over San Leonardo, still following the Passer river now southwards.&lt;br /&gt;
* Where the valley hits the next big valley &amp;quot;Etschtal&amp;quot;, is a bigger famous city called Merano. From there we follow the River Etsch and the Autobahn (highway) to the south and are soon approaching the somewhat hidden airport of Bolzano (LIPB) after an estimated time of somewhat under one hour at 120 knots.&lt;br /&gt;
&lt;br /&gt;
From here you can also continue more to the south to Trento (LIDT, total FT ~1:00) or Verona (LIPX, total FT ~1:20) - just follow the river Etsch to the south! Venezia is also not far away, just ~30 minutes/62nm to the east of Verona.&lt;br /&gt;
&lt;br /&gt;
==Grenoble Le-Versoud==&lt;br /&gt;
&lt;br /&gt;
[[Image:LFLG.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
France : '''LFLG'''  ( Grenoble Le-Versoud ) airport : border of Alps&lt;br /&gt;
*P.A.F. home base [http://equipe-flightgear.forumactif.com/ link]&lt;br /&gt;
*Scenery : http://clemaez.fr/flightgear/flightgearfrance_05062011.tar.gz&lt;br /&gt;
*Texture : http://clemaez.fr/flightgear/pattentextures_maj24082011.tar.gz&lt;br /&gt;
&lt;br /&gt;
* Take-off from Grenoble le Versoud (LFLG). Head south following the general direction of the Alps. Bearing left (East) will take you into high alpine territory, while towards the West lie the plains of the Rhône valley. Once you reach the Mediterranean coast, follow it to land in Marseilles (LFML), Nice (LFMN), or another smaller airport serving the French Riviera.&lt;br /&gt;
*Published in [[Custom France Scenery]].&lt;br /&gt;
&lt;br /&gt;
==Gulf of Finland sightseeing tour==&lt;br /&gt;
Take a VFR sightseeing tour over the Gulf of Finland from Helsinki to Tallinn! Estonia's landmarks are all recent additions, while Helsinki was one of the first cities to have original models in the scenery model database.&lt;br /&gt;
&lt;br /&gt;
Take off from the smaller EFHF airfield in Helsinki, or try your luck fighting the virtual traffic at Vantaa, and head toward the port of Helsinki. Look for the Hartwall Arena, the Pasila tower, the railway station and the Olympic Stadium along the way. Make your way out over the Gulf flying just west of south - a heading of 190 should set you up nicely for a sightseeing tour of Tallinn. Try to come in from the west and do a sweeping left turn over the capital of Estonia, looking out for the Swissotel, Olympic Hotel, the Television tower, and other important landmarks in the capital city of Estonia. Make sure you look out for St. Olaf's Church, the tallest building in the capital city. Make your way over the Ulemiste Jarv (lake) to land on runway 09 at Tallinn's main airport.&lt;br /&gt;
&lt;br /&gt;
If you desire, you can do a touch-and-go at Tallinn and set your course southeastward, landing at Tartu Airport, which is also modelled in FlightGear.&lt;br /&gt;
&lt;br /&gt;
The distance between Helsinki and Tallinn is about 50 miles or 80 kilometres, while Tartu is twice the distance from Tallinn at 100 miles/160 kilometres. Fly a heading of 135 to get to Tartu from Tallinn.&lt;br /&gt;
*Published in [[FlightGear Newsletter October 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
==Azores==&lt;br /&gt;
[[Image:LPLA-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LPLA-002.png|thumb|right|approaching island]] &lt;br /&gt;
The [http://en.wikipedia.org/wiki/Azores Azores], set in the middle of the Atlantic ocean, has had many names. Fortunate Isles, the Blue Islands, the Islands of Tin and Silver, the Islands of the Seven Cities. We can add, the Islands of Amazing Sights and Flights.&lt;br /&gt;
&lt;br /&gt;
Our flight is to celebrate the amazing views FlightGear can give us.&lt;br /&gt;
&lt;br /&gt;
Start your plane at [[Lajes Field]] (LPLA). This once was an emergency landing site for the [[Space Shuttle]] so you will have plenty of room to take off.&lt;br /&gt;
We will have to fly an odd pattern. The reason for that: if you don't fly too high (stick around 3000 while you can) you will have some amazing views.&lt;br /&gt;
&lt;br /&gt;
Next, fly towards and over LPPD. Look out the window and enjoy the view. Then head out towards LPHR. If you feel LPHR coming near, look out the window good, you might have to pull your plane up.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
*Published in [[FlightGear Newsletter August 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LPPD-001.png|thumb|left|over the island]]&lt;br /&gt;
[[Image:LPPD-002.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LPLA|LPLA - Lajes Field]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPLA.pdf chart]&lt;br /&gt;
* [[LPPD|LPPD - Ponta del gada]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPPD.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w020n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LPLA --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Canary Islands Trip ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An archipelago in the middle of the Atlantic sea, stunning beauty where you won't expect it. Seven islands, seven continents, thats what the canarian people say. And it's true, you will face seven totally different islands and nine different airports. &lt;br /&gt;
Take off from the largest one, GCLP, at the main island Gran Canaria. Leave the beautiful island heading to the west, and land at GCTS, the southern airport at Tenerife. Enjoy the view on Spains highest mountain, the glaciered Teide, when flying to La Gomera (GCGM), one of the greenest islands there. Master the short runway, and enjoy the view, before taking the challenge and approach El Hierro (GCHI). A short runway, with cliffs and rocks on both ends will cause you to sweat. From this island, which was claimed to be the western end of the world in medieval times, you'll turn to the beautiful and wild island of La Palma (GCLA). The next approach will be historical, because you are approaching the notorious Tenerife North (GCXO). Yes, I am serious, you will face that airport, where the worst civil plane crash ever took place. But you needn't worry, if you got that far, you will do this approach as easy as any other. The longest flight on your trip will take you to the eastern island, Lanzarote (GCRR). Take a look at the volcanic-red mountains, the vineyards, and the beaches. You want more beaches?? Depart to the south-west, fly over the small island of Los Lobos, and land in the holiday-paradise Fuerteventura. Enjoy dunes, bays, and very nice long beaches, before you finally touch down in Fuerteventura (GCFV). You want to stay? Okay, let's taxi to a parking position, and cut off the engines. If you still want more, fly back to Gran Canaria's GCLP, where we started our trip. &lt;br /&gt;
&lt;br /&gt;
Custom scenery: [[Canary Islands Custom Scenery]] / direct source: https://github.com/D-ECHO/Canarys &lt;br /&gt;
&lt;br /&gt;
=== Suggested Aircraft ===&lt;br /&gt;
&lt;br /&gt;
* small civil aircraft, such as the Cessna Skylane, Skyhawk, or Citation&lt;br /&gt;
* small airliners, like the Q400, the ATR72, the CRJ200, or similar&lt;br /&gt;
&lt;br /&gt;
Route by Flycanarias&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gibraltar==&lt;br /&gt;
[[Image:LEMG-010.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LEMG-011.png|thumb|right|just after take off]] &lt;br /&gt;
Traffic lights turn red, gates are closed. The only busy main road to the peninsula is closed and all the cars and trucks are waiting patiently. Waiting for a train to pass? No. Waiting for a plane to pass since the main road crosses a busy runway.&lt;br /&gt;
&lt;br /&gt;
On both sides water and being crossed by a busy main road can only be one runway: [http://en.wikipedia.org/wiki/Gibraltar_Airport Gibraltar airport]!&lt;br /&gt;
&lt;br /&gt;
One would expect an ILS installed on such a tricky runway but no, you will have to guess where it is and how far away it is. Not even an ADF points to it. &lt;br /&gt;
&lt;br /&gt;
Take off from LEMG (Malaga). Go South-West and find the runway of LXGB somewhere to the right of the rock. Happy guessing!&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LEMG-013.png|thumb|left|search for this]]&lt;br /&gt;
[[Image:LEMG-015.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LEMG|LEMG - Malaga]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LEMG.pdf chart]&lt;br /&gt;
* [[LXGB|LXGB - Gibraltar]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LXGB.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w010n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Piper Aerostar]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LEMG --aircraft=aerostar700 --adf1=300 --nav1=300:117.80&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Asia=&lt;br /&gt;
==Khorog, Tajikistan==&lt;br /&gt;
[[File:Fw190HinduKush.jpeg|left|thumb|Approaching a bank of snow-covered mountains in the south of the Hindu Kush]]&lt;br /&gt;
Surrounded by spectacular mountains and nestled in the end of a valley, Khorog Airfield (UT1C) makes an interesting place to land. It can only be approached by flying down the curved valley that snakes in from the North. Flying from here to OPCH (Chitral, Pakistan) at around 500ft AGL all the way is a wonderful way to explore the Hindu Kush mountains.&lt;br /&gt;
&lt;br /&gt;
If you bring a piston engined aircraft, be prepared to adjust the mixture as you climb - at the highest point in the flight, you will be at around 22000ft. Also, don't forget to carry plenty of fuel - there are very few airfields in the Hindu Kush that exist in FlightGear. This is a scenery bug that will hopefully be fixed in the future.&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:Armchair Ace| Armchair Ace]], published in [[FlightGear_Newsletter_January_2012#Suggested_flights| Newsletter January 2012]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Central Karakoram range ==&lt;br /&gt;
Let's explore one of the highest regions of the planet - the central Karakoram with the densest concentration of mountains of 8000 m and above. We're going to need a good climbing performance for the trip - even the frozen plateau of Baltoro glacier, above which K2 and Gasherbrum V and VI loom, is more than 13,000 ft high.&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram1.jpg|300px|thumb|left|Circling Gasherbrum I]]&lt;br /&gt;
&lt;br /&gt;
Take off from Skardu airport in Pakistan (OPSD). Skardu has a reasonably long (11,944 ft) runway at just 7,316 ft elevation, so you can take a jet, but for instance the [[De Havilland Canada DHC-6 Twin Otter|Twin Otter]] is more stylish. &lt;br /&gt;
&lt;br /&gt;
South of Skardu lies Deosai park, a famous high plateau, but we turn initially east. There's a chain of lakes which is the Indus river. After about five miles, the Shigar river merges with the Indus. Turn slightly left and follow the Shigar, then follow it into a long and broad lake-filled valley stretching into north-western direction.  &lt;br /&gt;
&lt;br /&gt;
Towards the end of the lake, a small tributary river, the Braldu, turns eastward out of the main valley. Follow the Braldu and start climbing (if you haven't done so yet). About 15 miles after turning into the Braldu river valley, two glacier-filled valleys stretch to the north - admire the view!&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram2.jpg|300px|thumb|right|Heading back into Skardu, Nanga Parbat on the horizon]]&lt;br /&gt;
&lt;br /&gt;
Passing a few lakes, you reach finally Baltoro glacier continuing the river valley stretching eastward. Ever climbing, follow the glacier till you reach some kind of T-junction. The glacier arm reaching north leads to K2 (which sadly isn't really there in Flightgear), but just ahead of you are the still rather impressive peaks of Gasherbrum V, VI and I - circle the range and make some pictures!&lt;br /&gt;
&lt;br /&gt;
A good way back to Skardu is to go about 10 miles sourth from the Gasherbrum peaks, then head due west.  To your west, you can see the long valleys fall away from the high ranges, to your right is the still glacier-covered high Karakoram. On a clear day (really good visibility selected) you can see the distinctive peak of Nanga Parbat appearing straight ahead on the horizon. The valley of Skardu is quite a distinctive feature and finding back VFR should not be a problem.&lt;br /&gt;
&lt;br /&gt;
Published in [[FlightGear_Newsletter_April_2012#Suggested_flights| Newsletter April 2012]] by [[User:Thosten|Thosten]].&lt;br /&gt;
&lt;br /&gt;
=Africa=&lt;br /&gt;
==Ngorngoro==&lt;br /&gt;
For this [[VFR]] trip we need a strong machine since we will go up from 4000 to about 10,000 feet and since we are in Africa, Tanzania , what better choice is there as the Cessna 208 Caravan, on wheels. We will take off from HTLM, [http://en.wikipedia.org/wiki/Lake_Manyara Lake Manyara], runway 12 (124.5 deg), that has an elevation of 4150 feet. Hit Shift-B so we don't drop off the runway. &lt;br /&gt;
[[File:Map Ngorngoro Crater.jpg|thumb|200px|left|Heightmap with visual reference points]]&lt;br /&gt;
We will have to change some settings before we take off. There is no snow where we are so: View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5000M). We need a reasonable clear sky since there are quite a few bumps we could hit: Environment=&amp;gt; Global weather=&amp;gt; METAR source=&amp;gt; Fair weather.&lt;br /&gt;
&lt;br /&gt;
Give full throttle and take off. Bank left and make a full circle so we gain some altitude and make a mental note of the airstrip, since this is the only one nearby. Look at the road West towards the airfield. &lt;br /&gt;
You will notice that the airstrip is at the edge of a mountain ridge, the lake to the East is quite a lot lower.&lt;br /&gt;
&lt;br /&gt;
We pass over the airstrip towards lake Manyara and turn left keeping the mountains close to our left side, on an initial course of about 30 deg. We keep the mountains to our left and follow our path, our heading will slowly go from 30 to North and takes about 15 mins. During our path we should slowly gain altitude. &lt;br /&gt;
[[File:Ol Doinyo Lengai.jpg|thumb|250px|Mt.Kerimasi (left), Mt.Ol Doinyo Lengai (ahead)]]&lt;br /&gt;
On the '''image''' we see two distinct mountains. The nearest is Mt.Kerimasi, a fun place for hang-gliders, and North Mt.Ol Doinyo Lengai, an active volcano. We are heading straight towards [http://en.wikipedia.org/wiki/Ol_Doinyo_Lengai Mt.Ol Doinyo Lengai]. Just before we would collide we take a sharp left turn heading 225. You will see why we need the altitude now.&lt;br /&gt;
&lt;br /&gt;
The mountain ahead, [http://www.ntz.info/gen/n00161.html#id03702 Mt.Embagai], we see does not appear to be anything spectacular. Aim towards it since we have to go over it. &lt;br /&gt;
Coming nearer, if you are high enough, 9000 feet, you will see why this mountain is well worth a visit. It is a crater with a lake inside, lake Embagai (Empakaai). Enter the crater and look around, careful not to loose any height since we'll have to get out again, we need about 10 000 feet. Mesmerized we grab our compass and take a course of 225 again. To get out we might skim against a cloud, be careful. If you don't see a way out take a turn again to wait for the clouds to move out of sight.&lt;br /&gt;
&lt;br /&gt;
After you managed to get out of the crater keep on the course of 225 while descending slowly for about 9 mins. There are some bumps to avoid, like Mt.Olmoti we keep to the right and Mt.Losirua on the left. &lt;br /&gt;
&lt;br /&gt;
After a small hill we enter one of the most amazing places in Africa, the [http://en.wikipedia.org/wiki/Ngorongoro_Conservation_Area Ngorngoro Crater], the second biggest crater in the world. A micro climate and amazing wildlife.&lt;br /&gt;
Examine the crater and you will notice two lakes, head towards the biggest lake, lake Magadi. When you are above it take a course of 123 to get out of the crater.&lt;br /&gt;
&lt;br /&gt;
After leaving the crater it takes some time before we are near the airstrip again. After about 5 mins we will see a river (left) and a road (right). Follow the road since it will lead us to the airstrip again.&lt;br /&gt;
&lt;br /&gt;
Don't scare the wildebeast!&lt;br /&gt;
&lt;br /&gt;
Notecard:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
#Fair weather, no snow&lt;br /&gt;
#HTLM RW 12 4150 feet&lt;br /&gt;
#Course 30 to 0 deg 15 mins, mountains close left&lt;br /&gt;
#Head towards /\volcano&lt;br /&gt;
#Sharp left turn course 225 deg altitude 9000 feet&lt;br /&gt;
#Volcano, lake, 10 000 feet&lt;br /&gt;
#Course 225 deg, slow descend 9 min&lt;br /&gt;
#Large lake, course 123 deg 5 mins&lt;br /&gt;
#River left, road right. Follow road&lt;br /&gt;
#Landing 124.5 deg 4150 feet.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]]. Published in [[FlightGear_Newsletter_December_2011#Suggested_flights | Newsletter December 2011]].&lt;br /&gt;
==Kisimayu to Kilimanjaro==&lt;br /&gt;
We have to take a big airliner for this trip. The runways are long enough but for this trip we need some altitude and a slow descend.&lt;br /&gt;
&lt;br /&gt;
We park our Big Bird at HCMK, [http://en.wikipedia.org/wiki/Kismayo_Airport Kisimayu], Somalia, near the East coast of Africa. It's unsure what this airfield is used for but it's a long piece of tarmac. I could not find regular flights to and from this airfield, not so strange, there is no lighting, no radio beacons and... no fuel. What you can find is Global Air Rescue that has an air ambulance service based here (with a [http://www.globalairrescue.com/learjet-35.php Learjet 35]).&lt;br /&gt;
&lt;br /&gt;
Our route will be around 425 nm in length. You know your aircraft and know what altitude you will need to fly.&lt;br /&gt;
&lt;br /&gt;
Our destination, HTKJ, [http://en.wikipedia.org/wiki/Kilimanjaro_International_Airport Kilimanjaro], Tanzania, has only one ILS and I have learned, if an airfield has only one ILS there is probably a reason. &lt;br /&gt;
&lt;br /&gt;
Flight Plan (short version):&lt;br /&gt;
#HCMK Kisimayu, length 12,177 ft, no navaids near.&lt;br /&gt;
#GAR Garissa [[VOR-DME]] freq 115.7 heading 268° dist 169 nm.&lt;br /&gt;
#KB Kilimanjaro [[NDB]] freq 393.0 heading 224° dist 258 nm, here is the holding pattern for the Kilimanjaro runway (and there is a [http://en.wikipedia.org/wiki/Mount_Kilimanjaro 19,000 ft] reason for this detour).&lt;br /&gt;
#KV Kilimanjaro VOR-DME freq 115.3 heading 70° dist 26 nm.&lt;br /&gt;
#HTKJ Kilimanjaro [[ILS]] freq 110.9 runway heading 88° elev 2,900 ft [[AMSL]] length 11,807 ft.&lt;br /&gt;
&lt;br /&gt;
Prepare your flight well to receive amazing views of the landscape during the final steps of the route, if you don't you will discover why some pilots call Kilimanjaro Kill-You-Manjaro.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | KCJi_ZaR8ec}}&lt;br /&gt;
Youtube video: Kilimanjaro approach in real, in FG not much different.&lt;br /&gt;
&lt;br /&gt;
*February 2012 by [[User:PH-JBO|PH-JBO]].&lt;br /&gt;
&lt;br /&gt;
=Australia and Oceania=&lt;br /&gt;
&lt;br /&gt;
==Hawai'i==&lt;br /&gt;
[[Image:Maui03.jpg|thumb|250px]]&lt;br /&gt;
Do you use [[TerraSync]]? If so, try a flight around Hawaii! Take off from PHNL in a light aircraft and head west until you hit Pearl Harbor; a right turn north will take you post the USS Arizona Memorial, and the Punchbowl Crater will be to your right. Or, fly east from PHNL past volcanic craters Diamond Head and Koko Head. If you follow the O'ahu coastline north from Koko Head, you can land at either old World War II airbase Bellows Field (now a wildlife reserve in real life) or at Keahole MCAS.&lt;br /&gt;
&lt;br /&gt;
For a potentially more scenic route, fly east toward Molokai, and stay to the north (left) of the island. The northern part of Molokai features huge sea cliffs and a tiny airstrip on the Kalaupapa peninsula - the peninsula being the only respite from the cliffs. A former leper colony existed near the airstrip!&lt;br /&gt;
&lt;br /&gt;
Also of interest are the volcanoes on Maui and the 'Big Island' of Hawai'i - flying VFR in a small plane from PHTO to PHKO over the plateau between Mauna Kea and Mauna Loa can be a challenge, as you have to take off from sea level, fly through a pass of 6500 feet, and then drop back down to sea level to land! The Hana coast of northern Maui is also a nice flight - a circumnavigation of Haleakala, starting and ending at PHOG, is quite a nice flight.&lt;br /&gt;
&lt;br /&gt;
The islands will be available through the download center with the next major scenery release, but for now, fire up [[TerraSync]] and your favorite VFR aircraft and have a blast.&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
==Brisbane International Airport to Sydney International Airport==&lt;br /&gt;
Going from Brisbane International Airport to Sydney International Airport. You should have a heading of about 203. Might take sometime to arrive to this section. Maybe 10-30 mins into the flight. Can't really say but don't give up, you will eventually reach this section of the flight. '''''Your eyes will be rewarded!''''' .&lt;br /&gt;
&lt;br /&gt;
[[Image:Fgfs-screen-020.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-016.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-012.png|200px]]&lt;br /&gt;
*Published in [[FlightGear Newsletter April 2011]] by [[User:Vin|Vin]]&lt;br /&gt;
&lt;br /&gt;
=Antarctica=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Suggested}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139883</id>
		<title>Suggested Flights</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Suggested_Flights&amp;diff=139883"/>
		<updated>2024-05-29T06:29:37Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Sightseeing the Alps in a C172 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;!-- if you add new flights to this page it would be cool to include your name and month of writing. Also include the newsletter month and year if the flight has been published in one. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ------------------------------------------------- --&amp;gt;&lt;br /&gt;
[[FlightGear]] has accurate and realistic terrain. Here are some interesting places where you can do virtual sight seeing.&lt;br /&gt;
&lt;br /&gt;
If you are starting with [[FGRun]] - the FlightGear launcher - you can enter the [[airport]] id and select the runway on the appropriate screen in the startup wizard.&lt;br /&gt;
If you are starting from the command line you can use the options: &amp;lt;tt&amp;gt;--airport=ABCD&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;--runway=12L&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Remember to give a look at the [[Suggested Airports]] page, where you can find a comprehensive list of high quality airports in FlightGear.&lt;br /&gt;
*If you enjoy these flights, please consider recording a flight and posting a link to it at the [[Suggested Prerecorded Flights]] page.&lt;br /&gt;
&lt;br /&gt;
'''Remove before flight!''' &amp;lt;!-- No comprendo? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before you start flying into one of the suggested flights, you should add both the terrain and the Objects to you FlightGear installation; This is well explained on the [[Howto: Install scenery|installing scenery]] page.&lt;br /&gt;
&lt;br /&gt;
p.s. charts are generated using FlightGear data only.&lt;br /&gt;
&lt;br /&gt;
This page includes the flights described on the [http://www.flightgear.org/places.html main website] and the suggested flights from the newsletters. It can serve as an archive for suggested flights from future [[FlightGear Newsletter|newsletters]] or can give a flight if creativity is low that month. &lt;br /&gt;
&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
&lt;br /&gt;
=Cross Continentals or World Tour=&lt;br /&gt;
&lt;br /&gt;
* [[Breitling DC-3 World Tour]][[File:Rect17.png|thumbnail]]&lt;br /&gt;
* [[Flying the Hump]]&lt;br /&gt;
&lt;br /&gt;
=North America=&lt;br /&gt;
==Round Valley Airport==&lt;br /&gt;
[[Image:O09-002.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:O09-003.png|thumb|right|Valley]]&lt;br /&gt;
Covalis, CA. The airport is at the West edge of a 7 mile across valley.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The predominant wind is a cross wind. Take-offs to the west (if they use the full runway length) often have to fly between 2 small hills and over another valley while gaining altitude. Most pilots take off to the west.&amp;lt;BR/&amp;gt;&lt;br /&gt;
It is a paved runway and quite long. It was designated as an emergency recovery field during the Cold War and was used twice that I know of by military aircraft that could not take off again from the field. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
{{Location map | USA&lt;br /&gt;
| caption = Latitude: 39.790156 Longitude: -123.266403&lt;br /&gt;
| lat_deg = 39.790156&lt;br /&gt;
| lon_deg = -123.266403&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* [[O09|O09 - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/O09.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
I have tried this trip using a p38, quite powerful airplane&lt;br /&gt;
* [[Lockheed-P38|P38]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=O09 --runway=28 --aircraft=p38&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Half Moon Bay==&lt;br /&gt;
[[Image:KHAF-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:KHAF-002.png|thumb|right|Bridge]]&lt;br /&gt;
Start at [[KHAF|Half Moon Bay]], Runway 30, with 32km visibility; Takeoff in the C172 and climb to 1000 feet, then continue north over the water, near the shoreline. Look out the right window frequently. Fly up the coast, overfly the Golden Gate Bridge, continue around the top of the peninsula past downtown SF, then fly on to [[KSFO]] for a landing. We now have lots to see.&lt;br /&gt;
&lt;br /&gt;
If you cannot see the runway in the default 172, you must be flying too high or too slowly. You can start by practicing a bit with a good setup:&lt;br /&gt;
&lt;br /&gt;
'''fgfs --offset-distance=1.5 --altitude=500 --vc=70'''&lt;br /&gt;
&lt;br /&gt;
As soon as FlightGear starts, cut the power to 1500 rpm and drop two notches of flap. Maintain 70 kt. Now, pick your landing spot (a bit down the runway) and try to hold it in the same spot on your windshield. If your landing spot starts moving down, you are too high, and should cut another 100 rpm; if it starts moving up, you are too low, and should add another 100 rpm. Adjust the nose to keep your speed at 70 kt all the way down until you're right above the numbers, then cut power to idle, drop the last notch of flaps, flare, and land.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KHAF-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:World-KHAF.png|thumb|right|Latitude: 37.513333 Longitude: -122.501111]]&lt;br /&gt;
* [[KHAF|KHAF - Half Moon Bay]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KHAF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
no required scenery tile.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSFO-001.png|thumb|left|Before landing]]&lt;br /&gt;
Use the default c172 airplane &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KHAF --runway=30 --visibility=32000 --aircraft=c172&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
April 2006 [[User:Hellosimon|Hellosimon]], format and extended by [[User:Francescobrisa|Francescobrisa]]&lt;br /&gt;
&lt;br /&gt;
==Hell's Canyon==&lt;br /&gt;
[[Image:25U-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:25U-004.png|thumb|right|Valley]]&lt;br /&gt;
Hell's Canyon, Imnaha, OR. This airport is located just west of &amp;quot;Hell's Canyon National Park&amp;quot; which has the Snake River running through it.&amp;lt;br/&amp;gt;&lt;br /&gt;
Supposedly it's a 5500 foot drop from the top of the canyon to the river.&amp;lt;BR/&amp;gt;&lt;br /&gt;
The airport is located on the brink of this canyon.&lt;br /&gt;
&lt;br /&gt;
See the remarks on the airport page (click on the airport id) ... DOWNDRAFTS, SHEER DROP IN TERRAIN, LIVESTOCK, etc. Don't go here on your first solo x-country. :-) &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:25U-005.png|thumb|left|Landing]]&lt;br /&gt;
[[Image:World-25U.png|thumb|right|Latitude: 45.427861 Longitude: -116.693889]]&lt;br /&gt;
* [[25U|25U - Round valley]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/25U.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:25U-006.png|thumb|left|Landing 2]]&lt;br /&gt;
I have tried this trip using a pilatus PC-9M, powerful airplane&lt;br /&gt;
* [[PC-9M|PC-9M]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=25U --aircraft=PC-9M&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crater Lake National Park Tour==&lt;br /&gt;
[[Image:64s-003.png|thumb|left|Approaching the lake]]&lt;br /&gt;
[[Image:64s-002.png|thumb|right|Direction 40 degrees]]&lt;br /&gt;
Prospect, OR.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take off and fly at a heading of about 40 degrees until you cross the first distinct ridge in front of you. (several minutes of flight in the navion ... just climb as fast as you can, it will be a close squeek to get over :-)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you clear the ridge and can see beyond it, turn right and fly a heading of about 70 degrees. You should see two shallow peaks off in the distance. Head right between these -- they are the two sides of the crater. As you get closer the shape of the crater will come into view. There's a lake there in real life, hopefully it will be there in flight gear too before long.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:64s-001.png|thumb|left|Leaving the 64S airfield]]&lt;br /&gt;
[[Image:World-64S.png|thumb|right|Latitude: 42.743183 Longitude: -122.488092]]&lt;br /&gt;
* [[64S|64S - Prospect State]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/64S.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:64s-004.png|thumb|left|Lake view 1]]&lt;br /&gt;
[[Image:64s-005.png|thumb|right|Lake view 2]]&lt;br /&gt;
&lt;br /&gt;
* [[Ryan_Navion|Navion]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=64S --runway=02 --aircraft=navion &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Grand Canyon Tour==&lt;br /&gt;
[[Image:Grand_Canyon_Tour_4.jpg|700px|frameless|center]]&lt;br /&gt;
Being a special place, there are also special flight rules for VFR traffic around the Grand Canyon. There are multiple no-fly-zones set up and VFR traffic is only allowed to fly via the designated corridors. If you want to fly realistically, avoid these zones in FlightGear as well, following for example the [https://skyvector.com/?ll=36.18649251415492,-112.52223157994264&amp;amp;chart=230&amp;amp;zoom=5&amp;amp;fpl=%20KGCN%20VPGCF%20VPGCG%20VPGCD%20VPGCC%20VPGCA%203608N11252W%203609N11309W%201Z1%201G4%203AZ5 route shown here. (skyvector link)]&lt;br /&gt;
&lt;br /&gt;
This flight takes you from KGCN, the Grand Canyon National Park airport, to 3AZ5, a small airfield called Hualapai located south of the Grand Canyon. Departing from KGCN, fly north-west bound to reach the canyon. From there, either follow the route shown on skyvector above, or fly visually through the canyon westbound towards 1Z1, Grand Canyon Bar Ten Airstrip. From there on, continue flying westward to 1G4. Called Grand Canyon West, 1G4 also marks about the western end of the canyon. To get to your destination 3AZ5, continue along the southern rim, flying eastward now. Shortly after leaving the breathtaking valley behind you, you will already reach your destination. Land and let your engine and your mind cool down from the special views :)&lt;br /&gt;
&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Grand_Canyon_Tour_2.jpg&lt;br /&gt;
Grand_Canyon_Tour_3.jpg&lt;br /&gt;
Grand_Canyon_Tour_1.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports===&lt;br /&gt;
* KGCN - Grand Canyon National Park Airport - [https://www.aopa.org/destinations/airports/KGCN/details aopa.org]&lt;br /&gt;
* 1Z1 - Grand Canyon Bar Ten Airstrip - [https://www.airnav.com/airport/1Z1 airnav.com]&lt;br /&gt;
* 1G4 - Grand Canyon West - [https://www.airnav.com/airport/1G4 airnav.com]&lt;br /&gt;
* 3AZ5 - Hualapai - [https://www.airnav.com/airport/3AZ5 airnav.com]&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
Most VFR aircraft with sufficiently big windows will serve the purpose, for example:&lt;br /&gt;
*[[Cessna C172P]]&lt;br /&gt;
*[[Optica]]&lt;br /&gt;
*[[Ryan_Navion]]&lt;br /&gt;
If you are more interested in flying helicopters, the [[Eurocopter EC130 B4]] with the Grand Canyon Helicopters livery might be for you.&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
*[https://www.nps.gov/grca/learn/nature/upload/sfra.pdf Chart of the Grand Canyon special airspace, published by the National Park Service]&lt;br /&gt;
*[http://www.swaviator.com/html/issueJJ99/canyon.html An article about flying close to the Grand Canyon]&lt;br /&gt;
*[https://www.aopa.org/news-and-media/all-news/2017/april/flight-training-magazine/road-trip-grand-canyon AOPA Flight suggestion]&lt;br /&gt;
&lt;br /&gt;
==Ranger Creek Airport==&lt;br /&gt;
[[File:21w-1.jpg|500px|center|Waiting for departure at Ranger Creek]]&lt;br /&gt;
Ranger Creek Airport is located in Greenwater, Washington, USA. Being wedged into the bottom of a steep canyon, you'll definitely need to be on your toes to get in and out of there. Switch on Advanced Weather and Live Data to experience what the winds can do to you in real life!&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
* [[21W|21W - Ranger Creek]] - [http://www.airnav.com/airport/21W airnav.com]&lt;br /&gt;
===Gallery===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Ranger_Creek1.jpg|Departing between the mountains&lt;br /&gt;
Ranger_Creek_2.jpg|Looking back towards the airfield&lt;br /&gt;
Ranger_Creek_3.jpg|Downwind for approach back to Ranger Creek&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
For this flight, the Piper PA-18 SuperCub is suggested, this is included in the [[Piper J3 Cub]] package&lt;br /&gt;
&lt;br /&gt;
==Mount Rainier Tour==&lt;br /&gt;
[[Image:WA20-002.png|thumb|left|The mountain from far away]]&lt;br /&gt;
[[Image:WA20-006.png|thumb|right|external view]]&lt;br /&gt;
Eatonville, WA. Start out at Swanson Airport in Eatonville, WA. Take off and fly a heading of about 90 degrees. You will need to fly for 5-10 minutes before the mountain comes into view. Be patient if you don't see it right away, it will dwarf everything in it's vicinity. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-WA20.png|thumb|right|Latitude: 46.87588502 Longitude: -122.25733500]]&lt;br /&gt;
&lt;br /&gt;
* [[WA20|WA20 - Swanson]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/WA20.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w130n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:WA20-007.png|thumb|left|external near view]] &lt;br /&gt;
[[Image:WA20-009.png|thumb|right|external near view]] &lt;br /&gt;
* [[mosquito]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=WA20 --aircraft=mosquito&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Death Valley Tour==&lt;br /&gt;
[[Image:L06-001.png|thumb|left|in the air]]&lt;br /&gt;
[[Image:Furnace-creek.jpg|thumb|left|real life view of Furnace Creek Airfield]]&lt;br /&gt;
[[Image:L06-002.png|thumb|right|in the air]] &lt;br /&gt;
Furnace Creek, CA. This starts you right in the middle of Death Valley which runs north &amp;amp; south. If you head south about 15 miles you'll hit the lowest point in the USA, 282 feet (86 meters) below sea level.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-L06.png|thumb|right|Latitude: 36.46451100 Longitude: -116.88139422]]&lt;br /&gt;
* [[L06|L06 - Furnace Creek]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/L06.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:L06-003.png|thumb|left|in the air]] &lt;br /&gt;
[[Image:L06-004.png|thumb|right|in the air]] &lt;br /&gt;
* [[rallye-MS893]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=L06 --aircraft=rallye-MS893&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Utah==&lt;br /&gt;
!!! Work in progress !!!&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Image:6WA8-002.png|thumb|left|landing 1]]&lt;br /&gt;
[[Image:6WA8-008.png|thumb|right|landing 2]] &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Escalante Muni Airport, Escalante, UT. This airport is east and a bit north of Bryce Canyon National park. If you head mostly south and a bit east you'll eventually hit the Grand Canyon. It is sandwiched between the Dixie National forest to the north and the Grand Staircase-Escalante National Monument to the south. There should be interesting stuff to see no matter which direction you head.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-1L7.png|thumb|right|Latitude: 37.75054400 Longitude: -111.57578300]]&lt;br /&gt;
* [[1L7|1L7 - Escalante Muni]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/1L7.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
	[[Image:6WA8-009.png|thumb|left|landing 3]] &lt;br /&gt;
* [[Piper PA-18 Super Cub|pa 18]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=1L7 --aircraft=pa18&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lake County Airport (CO)==&lt;br /&gt;
[[Image:KLXV-001.png|thumb|left|Adjust mixture !]]&lt;br /&gt;
[[Image:KLXV-002.png|thumb|right|The terrain will be covered by snow]] &lt;br /&gt;
Lake County Airport, Leadville, CO. This airport is at an elevation of 9927 making it a bit of a challenge to get into and out of with a standard C172.&amp;lt;BR/&amp;gt;&lt;br /&gt;
Make sure you lean out your engine before taking off and read up on density altitude before you try this one in real life. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:KLXV-003.png|thumb|left|The airport]]&lt;br /&gt;
[[Image:World-KLXV.png|thumb|right|Latitude: 39.22812500 Longitude: -106.31835600]]&lt;br /&gt;
* [[KLXV|KLXV - Lake Co]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KLXV.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w110n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KLXV-004.png|thumb|left|I like this panorama]] &lt;br /&gt;
[[Image:KLXV-005.png|thumb|right|The nearby lake]] &lt;br /&gt;
* [[Cessna C172P]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
[[Image:KLXV-006.png|thumb|left|Landing...]] &lt;br /&gt;
 fgfs --airport=KLXV --aircraft=c172p&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caribbean - Saint Martin and St. Kitts== &lt;br /&gt;
[[Image:TNCM-003.png|thumb|left|just after the take off]]&lt;br /&gt;
[[Image:TNCM-004.png|thumb|right|some nearby island]] &lt;br /&gt;
Pilots of the Caribbeans is an informal FlightGear community of users who fly around the small Caribbean islands, many of which have custom scenery and improved landclass data. (For details see [[Pilots of the Caribbean]])&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[TNCM|Princess Juliana International Airport (TNCM)]] at the isle of Saint Martin, is one of the most popular airports in FlightGear. In large part due to the custom objects and land cover. However, St. Marten is only one of several detailed airports in the region - and, while the approach for TNCM is one of the most memorable in the whole world, the land cover for St. Kitts and Nevis makes it a lovely place to fly.&lt;br /&gt;
&lt;br /&gt;
British Airways, US Airways and American Airlines, among others, all fly into St. Kitts' [[TKPK|Robert L. Bradshaw International Airport (TKPK)]] in real life.&lt;br /&gt;
&lt;br /&gt;
Take off from TKPK in a [[Piper_J3_Cub|Piper Cub]] and make a northward, clockwise circle of the island. Start your descent on the east side of the island, and focus on the small hill which separates the north from the south. Start hugging the coast near the beach and look to the west - as soon as the railroad heads to the southwest, you're about ready to turn for final. Make your right hand turn for final and taxi to the terminal.&lt;br /&gt;
&lt;br /&gt;
If you want to fully explore this whole country, take off in a Beaver, which has a little more speed, and fly a figure eight. Take off from TKPK and circle the airport to the north like in the Cub. Then instead of landing, perform a touch-and-go and turn left over the boat terminal and make for the west coast of Nevis. Enjoy the beauty of the south coast of St. Kitts before circling Nevis. Over Nevis, you have several options - cut your flight short and land at [[TKPN]] on the island of Nevis, complete the &amp;quot;figure eight&amp;quot; by heading back to TKPK, or check your fuel and head east across the Caribbean to Antigua (which does not have custom land cover).&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
Check out the [[Pilots of the Caribbean]] page, for further informations.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-TNCM.png|thumb|right|Latitude: 18.040953 Longitude: -63.108900]]&lt;br /&gt;
&lt;br /&gt;
* [[TNCM|TNCM - Princess Juliana International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TNCM.pdf chart] &lt;br /&gt;
* [[TKPK|TKPK - Robert L. Bradshaw International Airport]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPK.pdf chart] &lt;br /&gt;
* [[TKPN|TKPN - Vance Winkworth Amory Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TKPN.pdf chart] &lt;br /&gt;
others interesting airports in the area:&lt;br /&gt;
* [[TFFF|TFFF - Le Lamentin]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFF.pdf chart]&lt;br /&gt;
* [[MDPP|MDPP - Gregorio Luperon Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/MDPP.pdf chart]&lt;br /&gt;
* [[TJSJ|TJSJ - Luis Munoz Marin Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TJSJ.pdf chart]&lt;br /&gt;
* [[FMEE|FMEE - St Denis Gillot]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/FMEE.pdf chart]&lt;br /&gt;
* [[TFFG|TFFG - Grand Case]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/TFFG.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: &lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w070n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n10.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w080n20.tgz&lt;br /&gt;
* ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w090n20.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:TNCM-005.png|thumb|left|amazing]]&lt;br /&gt;
[[Image:TNCM-006.png|thumb|right|landing]] &lt;br /&gt;
* [[Piper_J3_Cub|Piper Cub]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=TKPK --aircraft=Cub&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Author===&lt;br /&gt;
[[FlightGear Newsletter January 2011]] by [[User:Statto|Statto]], format and extended by [[User:Francescobrisa|Francescobrisa]].&lt;br /&gt;
&lt;br /&gt;
==Friedman Memorial Airport (Idaho)==&lt;br /&gt;
[[Image:KSUN-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:KSUN-002.png|thumb|right|nearby]] &lt;br /&gt;
Friedman Memorial Airport, Hailey, Idaho. This airport is nestled in a valley surrounded by significant terrain. It's one that shows up quite often in accident investigations. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KSUN.png|thumb|right|Latitude: 43.51223900 Longitude: -114.30376100]]&lt;br /&gt;
* [[KSUN|KSUN - Friedman Mem]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KSUN.pdf chart] &lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w120n40.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KSUN-003.png|thumb|left|landing]]&lt;br /&gt;
[[Image:KSUN-004.png|thumb|right|landing]] &lt;br /&gt;
* [[FK9MK2]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KSUN --aircraft=fk9mk2&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wyoming - Grand Teton ==&lt;br /&gt;
Jackson Hole (KJAC) airport is located at around 6,400ft right next to the Teton range of mountains. The Tetons rise straight out of the plains, gaining over 5,000ft in 2 miles. &lt;br /&gt;
&lt;br /&gt;
You will need the w120n40 scenery.&lt;br /&gt;
&lt;br /&gt;
Tower frequency at KJAC is 118.07. Due to the high altitude, you will need to lean non-turbocharged piston aircraft before take-off. Don't forget that take-off distances will also be longer.&lt;br /&gt;
&lt;br /&gt;
After take-off head to the North East. Grand Teton is the highest of the three peaks that rise straight from the flat-lands. Follow the line of mountains to the East, passing over Jenny Lake. After a couple of miles you will reach a huge lake. The large bulk of a mountain to the East is Mount Moran.&lt;br /&gt;
&lt;br /&gt;
The Teton Mountain range is surprisingly thin - really just a string of mountains running SW-NE. Flying fast jets down the steep valleys is recommended.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
== Virginia Eastern Shore, Chesapeake Bay-Bridge Tunnel Sightseeing ==&lt;br /&gt;
[[Image:KTGI-001.png|thumb|left|before take off]]&lt;br /&gt;
[[Image:KTGI-002.png|thumb|right|right after take off]]&lt;br /&gt;
&lt;br /&gt;
Take a short VFR trip from Tangier Island to view the famous Chesapeake Bay Bridge-Tunnel connecting Cape Charles to Cape Henry. Depart historic Tangier Island (KTGI) situated in the Chesapeake Bay and land at Norfolk International Airport (KORF), Norfolk, Virginia. The scenic character of the flight is enhanced by leaving the island at dusk. The flight is both scenic and challenging. Frequently, when flying with real weather, you will have a steady wind blowing across the bay. Starting out quiet Tangier and arriving at busy, glittering Norfolk International (KORF) gives the flight some contrast.&lt;br /&gt;
&lt;br /&gt;
'''fgfs --airport=KTGI --runway=20 --timeofday=dusk'''&lt;br /&gt;
&lt;br /&gt;
Before leaving Tangier: Set your altimeter to the prevailing barometric temperature. Set your communications radio to the Norfolk Intl. (KORF) ATIS frequency of 127.150 MHz to listen for weather reports in the destination area. Set your navigation radio to 112.20 MHz to pick up the Cape Charles (CCV) VOR. Set your heading bug to the runway heading, 200.&lt;br /&gt;
&lt;br /&gt;
Takeoff straight, flying the runway heading. Climb to 2000ft and maintain.&lt;br /&gt;
&lt;br /&gt;
Shortly, you should see the VOR assigned to NAV1 display receive a steady signal (the OFF flag will disappear). The DME should also settle down and display the distance to the Cape Charles VOR station. The flight to CCV will be about 26 nautical miles. As you fly, it will show your airspeed and time to arrival. It should take about ten minutes.&lt;br /&gt;
&lt;br /&gt;
Turn the OBS knob until the VOR displays the TO flag and 190 degrees, the heading you should now turn to.&lt;br /&gt;
&lt;br /&gt;
Fly south from Tangier, crossing an expanse of water, about ten miles until you see the Virginia Eastern Shore. You'll come upon the grass airstrip of Chance (VA89) a few minutes out from Tangier. Beyond are two flashing tower beacons. You may catch a glimpse of Weirwood/Kellam (W08) on the ocean shore, recognizable by two crossing dirt strips.&lt;br /&gt;
&lt;br /&gt;
If you look carefully, you may see the little white building that is the Cape Charles VOR station. As you fly over VOR the flag will change from TO to FROM and the needle will deflect. Do not try to follow the needle. Wait until you are past the VOR. As you cross the VOR station, you should see a highway slanting across your path toward the south west. Turn to follow this highway. You'll come across a lone tower with beacon along the roadside. You'll see an access road stretching from the tower complex to the main road.&lt;br /&gt;
&lt;br /&gt;
If the sky conditions permit, you may try your hand at wayfinding by following the road. If visiblity is poor, set the VOR to 180 degrees to parallel the road to the end of the peninsula. Or you can continue to fly outbound from the VOR on 190 by maintaining the same heading. The VOR needle should return to center with the FROM flag displaying. This will put you west of the bridge with a good view and the option to turn towards KORF near the initial approach fix. If you follow the highway you will need to overfly the airport, but if you stay on the 190 heading, you will be in a position to make a straight in landing.&lt;br /&gt;
&lt;br /&gt;
As you fly down the peninsula you'll pass Cherrystone, Eagle's Nest, Scott and Bull Farm grass airstrips. Bull Farm is the last strip before the mouth of the Chesapeake. Just past Scott Farm you should see the first glimmer of the northern leg of the bridge. The grass strips can be very difficult to see.&lt;br /&gt;
&lt;br /&gt;
As you reach the end of the peninsula, be careful to avoid the tower on Fisherman's Island at the north end of the north leg of the bridge (Note the bridge is not modeled by FlightGear...but I hope to work up one eventually). Next comes the north middle leg. Turn right a few degrees to follow the south middle leg. Watch as the deck plunges beneath the waves to allow ships to navigate the north and south channels.&lt;br /&gt;
&lt;br /&gt;
As Cape Henry approaches, you'll see the Norfolk International airport to the right and the southern leg of the bridge touching the shore.&lt;br /&gt;
&lt;br /&gt;
If you intend to land at KORF, you will want to start your approach soon. Otherwise, you may continue to follow the bridge to the end. Make the approach to KORF by contacting the tower for vectors. Or use the ILS.&lt;br /&gt;
&lt;br /&gt;
This is a good flight to practice VOR flying on. It is a very straight flight path to the VOR requiring little adjustment and there are no other VORs in the area to confuse you.&lt;br /&gt;
*June 2006 by [[User:Sek|Sek]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:World-KTGI.png|thumb|right|Latitude: 37.8250835 Longitude: -75.9976665]]&lt;br /&gt;
* [[KTGI|KTGI - Tangier Island]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KTGI.pdf chart]&lt;br /&gt;
* [[KORF|KORF - Norfolk International]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/KORF.pdf chart]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w80n30.tgz&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:KTGI-003.png|thumb|left|surroundings]]&lt;br /&gt;
[[Image:KORF-001.png|thumb|right|landing to KORF]]&lt;br /&gt;
I have tried this trip using a Seneca II&lt;br /&gt;
* [[Piper PA34-200T Seneca II]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=KTGI --runway=20 --timeofday=dusk  --aircraft=SenecaII&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prince George to Calgary Springbank==&lt;br /&gt;
A beautiful flight is from Prince George (CYXS), to Calgary Springbank (CYBW). Route created by reed, which can be seen at {{forum link|t=9772|text=the forums}}&lt;br /&gt;
*Published in [[FlightGear Newsletter November 2010]] By [[User:Cael|Cael]].&lt;br /&gt;
==Ketchikan to Juneau==&lt;br /&gt;
It's cold where we will go so dress up warm and if we are lucky we might see whales during our flight. Don't fly too high to enjoy the amazing views, and there is a small challenge at the end. The runways we will use are long enough for bigger aircraft (7000+). Total length of the trip will be around 245 NM. So, hop in the cockpit of your favourite airliner.&lt;br /&gt;
&lt;br /&gt;
Alaska, here we come! Enjoy!&lt;br /&gt;
#Park your aircraft on PAKT, [http://www.borough.ketchikan.ak.us/airport/airport_history.htm Ketchikan International], runway 11. The wind is coming from '''South''', change the weather if needed (SE is ok too). &lt;br /&gt;
#Fly North towards [[NDB]] Fredericks Point on 372.0 for 94 NM. &lt;br /&gt;
#Fly towards [[NDB]] Five Fingers on 295.0 for 39 NM. &lt;br /&gt;
#Fly towards [[NDB]] Gustavus on 219.0 for 77 NM. &lt;br /&gt;
#Fly towards [[NDB]] Coghlan Island on 212.0 for 32 NM.&lt;br /&gt;
#Set the [[ILS]] on 109.9 and land your aircraft (after 4 NM) on PAJN, [http://www.juneau.org/airport/ Juneau International], runway 08.&lt;br /&gt;
If you feel warm after this landing, you just crossed a NORAD microwave site, so that is why.&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]] [[FlightGear Newsletter November 2011]]&lt;br /&gt;
==Searching Wizard Island==&lt;br /&gt;
*USA, Oregon, Klamath County&lt;br /&gt;
With one [[VORTAC]] behind our back we do an [[IFR]]/[[VFR]] search of Wizard Island, a mysterious place, a sacred place for native Americans. You might even find the &amp;lt;tt&amp;gt;Old Man of the Lake&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Don't pull up the map, that would spoil the surprise but I promise '''unique views'''. We will land on a short lawn runway. Terrain [[altitude]] will range from 4,000 to a max of 8,930 feet and down again. Total length of the trip will be about 50 NM. Select your aircraft with care. It must have one working navigational radio (VOR-DME), a strong engine, a strong undercarriage, must be capable of a good climb and a steep descend. I suggest to use Fair weather (Environment=&amp;gt;Global Weather). If needed remove some clouds (View=&amp;gt;Rendering Options=&amp;gt;Slider 3d Clouds to the left).&lt;br /&gt;
[[File:Mount Scott.jpg|thumb|250 px|Mount Scott (8,929 feet) just after depart from 2S7 (Two Sierra Seven). Wizard Island is just to the North-West of it.]]&lt;br /&gt;
*Park your aircraft on 2S7 (Two Sierra Seven), Chiloguin-State.&lt;br /&gt;
*Set [[NAV1]] on 115.9 (Klamath Falls VORTAC) and on radial 323&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magnetic). We are at an [[elevation]] of 4,217 feet. Set QNH. Set heading bug at 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn).&lt;br /&gt;
*Take off an fly the course set with the heading bug.&lt;br /&gt;
*Intercept the radial.&lt;br /&gt;
*Monitor distance and you will find Wizard Island at 50 NM from Klamath Falls. The island has an elevation of 6,673 feet. I suggest a full 360&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; turn, take pictures.&lt;br /&gt;
*Set radial 318&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt;, keep the same frequency. Do a new radial intercept.&lt;br /&gt;
*Try and find the airstrip (3S6, Three Sierra Six, Toketee-State) at 71 NM from Klamath Falls with an elevation of 3,361 feet, runway heading 275&amp;lt;sup&amp;gt;o&amp;lt;/sup&amp;gt; (Magn). There are bumps around you should avoid.&lt;br /&gt;
*If you are capable of finding the island, finding the airstrip and landing without a crash, in one go..., you are a wizard.&lt;br /&gt;
&lt;br /&gt;
Click [http://en.wikipedia.org/wiki/Crater_Lake this link] '''after''' you have landed so you know what amazing landscape you have seen.&lt;br /&gt;
&lt;br /&gt;
*December 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter March 2012]].&lt;br /&gt;
&lt;br /&gt;
=South America=&lt;br /&gt;
==Southern Tip of Chile==&lt;br /&gt;
[[Image:Scgz-001.png|thumb|left|right after take off]]&lt;br /&gt;
[[Image:Scgz-004.png|thumb|right|Some part of the scenery]]&lt;br /&gt;
Gary Carvell: Here is a suggestion for the FlightGear Places to Fly page. I don't have any particular routes, just fly around and enjoy the gorgeous scenery.&amp;lt;BR/&amp;gt;&lt;br /&gt;
These three airports are in the same region of the very southern tip of Argentina. This area is a scenic wonderland - a maze of islands, mountains, and ocean channels. Hours of entertainment.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SCGZ - Puerto Williams Guardiamarina Zanartu Airport, Chile Located on the north coast of Isla Navarino facing the Beagle Channel. At 55 deg S. longitude, Puerto Williams is considered the southernmost town in the world.&amp;lt;BR/&amp;gt;&lt;br /&gt;
SAWH - Ushuaia Islas Malvinas Airport&lt;br /&gt;
SAWO - Ushuaia Est Aeronaval Airport&lt;br /&gt;
Ushuaia, on the south coast of Isla Grande de Tierra del Fuego, on the the Beagle Channel.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:Sawh-004.png|thumb|left|Approaching Ushumaia Malvinas Argentinas]]&lt;br /&gt;
[[Image:World-scgz.png|thumb|right|Latitude: -54.931072 Longitude: -67.626261]]&lt;br /&gt;
&lt;br /&gt;
* [[SCGZ|SCGZ - Guardiamarina Zanartu]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SCGZ.pdf chart]&lt;br /&gt;
* [[SAWH|SAWH - Ushuaia Malvinas Argentinas]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWH.pdf chart]&lt;br /&gt;
* [[SAWO|SAWO - Ushuaia Est Aeronaval]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SAWO.pdf chart]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:Scgz-002.png|thumb|left|Just left the scgz airport]]&lt;br /&gt;
I personally like to fly this area in the [[Consolidated_Aircraft_PBY_Catalina|Catalina]], it's a great sightseeing plane with the advantage that you can take off and land just about anywhere. &lt;br /&gt;
* [[Consolidated_Aircraft_PBY_Catalina|Catalina]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SCGZ --aircraft=Catalina&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Copacabana to San Rafael over Lake Titicaca==&lt;br /&gt;
Bolivia to Peru. This trip will lead you over one of the highest and deepest lakes in the world towards the highest airfield in the world. It a demonstration of a [[IFR]] flight towards a fix and a demonstration how accurate FlightGear simulates air density and the effects it has on aircraft.&lt;br /&gt;
[[File:Slcc-sprf.jpg|thumb|200px|left|Flight and fix SLCC to SPRF]]&lt;br /&gt;
Place your aircraft on the airfield [http://en.wikipedia.org/wiki/Copacabana,_Bolivia SLCC, Copacabana], with an [[elevation]] of 12,592 feet. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M). &lt;br /&gt;
&lt;br /&gt;
We will fly towards and land at SPRF. If you would enter SLCC and SPRF in [[Kelpie]] planner you probably would not be able to find SPRF. To find SPRF I am adding an additional VOR-DME station and for a good fix give you another VOR-DME. Try Kelpie planner to plan this route and compare with this suggestion.&lt;br /&gt;
&lt;br /&gt;
Equipment preparation. Set [[NAV1]] to [http://en.wikipedia.org/wiki/Juliaca Juliaca] VOR-DME on 155.55 with a radial of 311° (magnetic). Set [[NAV2]] to Arequipa VOR-DME on 113.7 with a radial of 212°. During our flight we will fly with [[true altitude]] as set with [[QNH]], keep QNH updated. Arm the autopilot with the [[heading bug]] at 311° and an initial altitude of 13,500 feet.&lt;br /&gt;
&lt;br /&gt;
Take off and if you took the wrong RW pull up hard. Take a small tour over [http://en.wikipedia.org/wiki/Titicaca lake Titicaca], see the floating islands and try to find the lost golden treasure. Intercept the nearest radial on NAV1 towards Juliaca (about 311°). &lt;br /&gt;
&lt;br /&gt;
Just before Juliaca is a hill so while on lake Titicaca increase altitude to 14,200 feet, the [[VFR]] part of this trip is over. After passing Juliaca set the radial of NAV1 to 352° and set the altitude to 17,422 feet. We will fly from NAV1 and slowly increase altitude.&lt;br /&gt;
&lt;br /&gt;
At a distance of about 60 NM set the heading bug on the current course. Monitor the distance to NAV1, the radial of NAV2 and the distance to NAV2. At a distance of 74.5 NM to NAV1, a distance of 140.7 NM and at the '''radial''' intercept of NAV2 should be the runway. So, from 60 NM onwards, look outside the window, then at NAV1 and then NAV2 etc.&lt;br /&gt;
&lt;br /&gt;
If you are at 80NM to NAV1 you have missed the airfield but you still won't hit any hills (unless you bank left). Bank right and set the heading bug to 172°. Fly back towards NAV1 and intercept the radial 352° at about 50NM again to repeat the search.&lt;br /&gt;
&lt;br /&gt;
The runway SPRF, San Rafael, has a elevation of 14,422 feet and a heading of 297°/ 117°. Our initial altitude has been set 3,000NM above the RW elevation. That should give sufficient room for navigation.&lt;br /&gt;
&lt;br /&gt;
After you have seen the airfield set the radial of NAV1 to 297°, the heading of the runway (not the course to the runway) as a visual aid. Land on RW 30 (and not on RW 12 unless you are a show-off). Oh, there is a small hill in front of RW 30, just so you know.&lt;br /&gt;
&lt;br /&gt;
Decreasing speed at this altitude can be a bit tricky. The air is thin and does not give much resistance. Next to that, the difference between [[indicated airspeed]] and [[ground speed]] is very noticeable. The ground speed is much higher as the indicated airspeed.&lt;br /&gt;
&lt;br /&gt;
After a successful landing, try to discover the origin of the Amazon river since we are now at the starting point of that trip.&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]], published in [[FlightGear_Newsletter_February_2012#Suggested_flights| Newsletter February 2012]].&lt;br /&gt;
&lt;br /&gt;
==Origin of the Amazon River==&lt;br /&gt;
[[Image:SPRF-001.png|thumb|left|high altitude]]&lt;br /&gt;
[[Image:SPRF-002.png|thumb|right|high altitude]] &lt;br /&gt;
Peru. For this [[IFR]] tour (with [[VFR]] parts) we take off from the highest airfield in the world to discover the origin of the [http://en.wikipedia.org/wiki/Amazon_River Amazon river] in South America. I promise spectacular mountains and valleys. The total length of this trip is about 175 NM.&lt;br /&gt;
&lt;br /&gt;
Place your aircraft on the airfield SPRF, San Rafael. FlightGear will show snow all around you but that is not very realistic so let's clean up. View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5,000M).&lt;br /&gt;
&lt;br /&gt;
Equipment preparation: Set [[NAV1]] to [http://en.wikipedia.org/wiki/Arequipa Arequipa] VOR-DME at 113.7 with a radial of 176° (magnetic). Set [[NAV2]] to [http://en.wikipedia.org/wiki/Cusco Cusco] VOR-DME at 114.9 also with a radial of 176°.&lt;br /&gt;
Set [[QNH]] and during flight keep correcting it, it's a bad idea to use [[Pressure altitude]] during this flight. Set the [[heading bug]] to 250°. Arm the [[autopilot]] and set the initial [[altitude]] to 16,000 feet.&lt;br /&gt;
&lt;br /&gt;
The airfield SPRF, San Rafael has an [[elevation]] of 14,422 feet. That altitude will cause problems during take-off. It takes a lot longer for the aircraft to gain sufficient speed for take-off, also the take-off speed that is needed is higher as you would expect. Perhaps an additional notch of flaps is needed.&lt;br /&gt;
&lt;br /&gt;
Take-off, avoid the bumps (there are plenty) and fly a course of 250°. After about 80 NM you will fly over the radial of NAV1. Intercept the radial towards Arequipa. At a distance of 75 NM towards NAV1 you will have to increase altitude to 19,000 feet. &lt;br /&gt;
&lt;br /&gt;
At a distance of 50 NM towards NAV1 and 118 NM from NAV2 you will see and cross over the mountain [http://en.wikipedia.org/wiki/Nevado_Mismi Nevado Mismi] with an altitude of 18,362 ft. The rains and water on the area to the right until Nevado Mismi will leave towards the Atlantic ocean through the Amazon river. Anything to the left and after Nevado Mismi will leave towards the Pacific ocean.&lt;br /&gt;
&lt;br /&gt;
After Nevado Mismi you are tempted to descend. Don't. Just before the airfield is [http://en.wikipedia.org/wiki/Chachani Mt.Chachani] with an altitude of 19,872 feet and to the East is the active volcano [http://en.wikipedia.org/wiki/El_Misti El Misti] with an altitude of 19,101 feet. You can either increase the altitude and fly over the airfield or keep the altitude, even descend and fly between the mountains, your choice depends on the visibility.&lt;br /&gt;
&lt;br /&gt;
Fly using the heading bug and set NAV1 to [[ILS]] 109.7 with a radial of 93.2°. We will land at airfield [http://en.wikipedia.org/wiki/Rodr%C3%ADguez_Ball%C3%B3n_International_Airport SPQU, Rodriguez ballon], that has an elevation of 8,405 feet. There is a reason this airfield has just one ILS. The area South-West of the airfield is below 11,405 feet and is safe to navigate.&lt;br /&gt;
&lt;br /&gt;
Position the aircraft in front of the runway at an altitude of 11,405 feet, catch the [[glidescope]] at a distance of 9.5 NM and land your aircraft. After landing and parking your aircraft crawl into the tower to look around.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
&lt;br /&gt;
* October 2011 by [[User:PH-JBO|PH-JBO]]. Published [[FlightGear_Newsletter_March_2012|Newsletter May 2012]].&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:SPQU-001.png|thumb|left|pre - landing]]&lt;br /&gt;
[[Image:World-SPRF.png|thumb|right|Latitude: -14.267 Longitude: -70.467]]&lt;br /&gt;
* [[SPRF|SPRF - San Rafael]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPRF.pdf chart]&lt;br /&gt;
* [[SPQU|SPQU - Rodriguez Ballon]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/SPQU.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/w020s80.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:SPQU-002.png|thumb|right|landed]] &lt;br /&gt;
I recomend a powerful jet angine airplane, but not too heavy !&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=SPRF --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Middle East=&lt;br /&gt;
==Israel to Jordan over the Dead Sea==&lt;br /&gt;
[[Image:LLBS-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LLBS-002.png|thumb|right|flat land]] &lt;br /&gt;
Dead Sea is the lowest water elevation on the Earth. Take off from the Beer-Sheva Teyman airport and head East-North-East. About half way there, after the southern Hebron mountains ridge, there'll be a sharp drop-off down to the Dead Sea --- the lowest exposed point on the Earth.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
It's really fun to descend and explore the beautiful coastline. In the real life, you wouldn't like to fly low over this water there of your own will --- while you don't need a life vest in the Dead Sea, the water is pretty caustic there for one's eyes. Once you're done marvelling the sights, continue on to the Queen Alia airport. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LLBS-006.png|thumb|left|landing in the dead sea, notice the altitude !]]&lt;br /&gt;
[[Image:OJAI-007.png|thumb|right|landing at Queen Alia Intl.]] &lt;br /&gt;
[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]&lt;br /&gt;
* [[LLBS|LLBS - Teyman]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LLBS.pdf chart]&lt;br /&gt;
* [[OJAI|OJAI - Queen Alia Intl]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/OJAI.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: ftp://ftp.sunsite.org.uk/sites/ftp.flightgear.org/flightgear-ftp/Scenery/e030n30.tar.gz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
[[Image:LLBS-003.png|thumb|left|approaching the dead sea]]&lt;br /&gt;
[[Image:LLBS-004.png|thumb|right|there is also a minor airport]] &lt;br /&gt;
* [[Albatross]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LLBS --aircraft=Albatross&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Europe=&lt;br /&gt;
==Edinburgh to Oban==&lt;br /&gt;
See article: [[Edinburgh to Oban]].&lt;br /&gt;
&lt;br /&gt;
==Oban to Prestwick==&lt;br /&gt;
The west coast of Scotland offers some stunning scenery and a number of small airfields and airports to land at on both the mainland and the small islands the dot the coast. The distances between the various airfields are quite small, and some of the runways are on the short side, so STOL or GA aircraft are ideal. The tour suggested here follows part of a microlight trip I made this month, photos of which can be found [http://www.nanjika.co.uk/photos/gigha/ here].&lt;br /&gt;
&lt;br /&gt;
Oban airport (EGEO) lies on the west coast of Scotland, and offers fuel (both AVGAS and AVTUR) and a North/South tarmac runway.&lt;br /&gt;
&lt;br /&gt;
From Oban it is just a 10 minute flight west to the grass airfield of Glenforsa (EG45), on the north-east coast of the island of Mull. Due to the hills and water channel, this airfield often gets quite strange wind patterns - the weather can be perfect in Oban, but much gustier and windier at Glenforsa. At times the windsocks at either end of the runway can blow in completely opposite directions!&lt;br /&gt;
&lt;br /&gt;
Some distance north of Oban lie the airfields of the Isle of Skye (EG57) and Plockton (EG81). This is an excellent place from which to explore the mountains of the Isle of Skye, known as the Cuilins.&lt;br /&gt;
&lt;br /&gt;
Heading south from Oban, one can follow the coast to the island of Jura, with it's distinctive hills (The Paps of Jura). From Jura one can head south to the island of Islay with its numarous malt whisky distilleries (many of which are modelled in FG). Islay Airport (EGPI) has extensive runways. From Islay head north east to the tiny island of Gigha. Despite it's small size, it too has an airfield (EG44), though the FG version is tarmac rather than grass.&lt;br /&gt;
&lt;br /&gt;
From Gigha head east over the Mull of Kintyre, to the hilly isle of Arran, then north east to the Isle of Bute. Both islands have very small grass airstrips, which are sadly not present in FG. From Bute you can head south east to Prestwick International (EGPK), famous for being the only place Elvis touched down in the UK, and a fine place to end our tour.&lt;br /&gt;
*Published in [[FlightGear Newsletter July 2011]] by [[User:Stuart|Stuart]]&lt;br /&gt;
&lt;br /&gt;
== Edinburgh to Dundee ==&lt;br /&gt;
Edinburgh Airport (EGPH) is located to the West of the city of Edinburgh and south of the Forth rail and road bridges. You'll need the w010n50 scenery and the latest set of objects from the scenery DB which include a number of models for the Edinburgh area.&lt;br /&gt;
&lt;br /&gt;
From Edinburgh Airport, head north and circle the bridges, then follow the coast on the south eastwards past Edinburgh (watch out for the Castle!) and to East Lothian and Bass Rock - a volcanic plug in the sea that is host to thousands of sea-birds.&lt;br /&gt;
&lt;br /&gt;
There are a number of sights in East Lothian, include a distillery.&lt;br /&gt;
&lt;br /&gt;
If you wish to continue your tour, head back North, crossing the Firth of Forth to the Kingdom of Fife. Head approximated North West, tracking towards the Perth VOR (110.4). There is an airport here (Perth Scone, EGPT), but instead we will now track out on the 090 radial and pick up the ILS to Dundee Airport (108.10) landing beside the sea.&lt;br /&gt;
* September 2006 by [[User:Stuart|Stuart]].&lt;br /&gt;
&lt;br /&gt;
==Austrian alps soaring==&lt;br /&gt;
Using the AI subsystem, discover the Austrian alps with a glider. [[Pinzgauer Spaziergang]]&lt;br /&gt;
&lt;br /&gt;
== Sightseeing the Alps in a C172 ==&lt;br /&gt;
This tour will guide you to many of the most famous mountains, valleys, glaciers, snowfields, winter and summer vacation areas, etc. in the European Alps. In addition there are several hints to visit nearby areas of interest. On the tour you will visit Switzerland, Italy and France.&lt;br /&gt;
See the detailed description in: http://www.emmerich-j.de/FGFS/Alp-flying.pdf (mirrored to https://beni.hallinger.org/fgfs.nobackup/Alp-Tour-Jomo/)&lt;br /&gt;
*February 2011 by [[User:Jomo|Jomo]].&lt;br /&gt;
&lt;br /&gt;
* The scenic trip does take about 2 hours.&lt;br /&gt;
* Skyvector route: https://skyvector.com/?ll=46.464097146192884,7.159790050777061&amp;amp;chart=301&amp;amp;zoom=6&amp;amp;fpl=%20LSZC%204700N00836E%204647N00840E%204642N00836E%204637N00835E%204634N00823E%204634N00812E%204633N00809E%204634N00805E%204634N00801E%204631N00803E%204624N00746E%204619N00745E%204618N00753E%204614N00752E%204612N00749E%204609N00747E%204603N00746E%204601N00745E%204600N00738E%204555N00724E%204555N00712E%204553N00703E%204547N00652E%204549N00649E%204604N00634E%20LSGG&lt;br /&gt;
&lt;br /&gt;
== Salzburg to Zell am See via Hallstatt ==&lt;br /&gt;
[[File:LOWS-LOGO-LOWZ.jpg|thumb|The route for Salzburg to Zell am See via Hallstatt]]&lt;br /&gt;
This flight will bring you around a very scenic region of the austrian alps.&lt;br /&gt;
* [https://skyvector.com/?ll=47.5666119817603,13.107925427128999&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A040%20LOWS%204735N01311E%204736N01339E%204733N01340E%204733N01343E%204735N01343E%204738N01355E%204727N01357E%20LOWZ SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 1 hr. air time at 120 KTAS.&lt;br /&gt;
* Fly at an altitude of about 4000ft or so (the entire trip can be done at that altitude safely).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start ''Salzburg (LOWS)''; follow the Autobahn in the valley to the southeast until you reach the fork at ''Golling''. To the south you see the Mountains of the ''Tennengebirge''.&lt;br /&gt;
* Alternatively (and I recommned that), you can also deviate sothwest around ''Mt. Untersberg'' (1972m, hosting germanys longest and deepest cave, the ''Riesending'') to visit lake ''Königsee'' and watch the peaks of the ''Steinernes Meer'' (the dominant and very famous ''Mt. Watzmann'', 2713m!) and north side of the ''Mt. Hochkönig''. You need to climb to at least 6200ft to cross the final ridge at the end of the lake valley. After crossing, descend to 4000ft, follow the valley and fly north at the next valley to rejoin the route.&lt;br /&gt;
* Turn east and follow the valley and hills, aim for a prominent V-shaped incision at the end. Fly through there and you suddenly break out at the lake ''Hallstätter See'', a fjord-like lake 125m deep.&lt;br /&gt;
* Follow the ''Hallstätter See'' to the south, on its western shore is the famous town of ''Hallstatt''. At the mountain to your right (north of Hallstatt) is a very old settlement dating back to the late bronce age (Hallstattzeit, c. 800–450 BC) and there was a very important Salt mine dating back to that time and important archeological grave findings.&lt;br /&gt;
Looking south you can see the ''Dachstein'' (2995 m), a high peak hosting the ''Hirlatzhöhle'', with 120km the twentiest longest and with 1560m sixth deepest cave of planet earth.&lt;br /&gt;
* Follow the valley east bend to ''Obertraun'', and then north over the ''Koppenpass'' and the town of ''Bad Aussee''.&lt;br /&gt;
* From ''Bad Aussee'', fly straight to the lakes ''Grundlsee'' and ''Toplitzsee'' (you can't see the latter yet).&lt;br /&gt;
* Between the two, turn southwards and aim for the reservoir lake ''Salza'' which is in the sharp incision you can see to the south.&lt;br /&gt;
* After passing the reservoir, you may try to get down to ''Niederoblarn'' (LOGO) to the southeast, it's a short airfield.&lt;br /&gt;
* From there, follow the railway in the valley of Enns westwards, LOWZ is about 20 minutes away. On your right side watch out for the other side of the ''Dachstein'' and the town of ''Schladming'', which lies down in the valley next the rocky hills with the river flowing trough. Look for the railway and the river Enns.&lt;br /&gt;
* Behind ''Schladming'' (south of Mt. ''Dachstein'', approximately halfway of the distance LOGO/LOWZ) the valley will widen a bit again, featuring a rocky mountain in the middle of the valley. Continue to follow the railway and river bending nortwest arond the small mountain.&lt;br /&gt;
* Near the bigger town of ''Radstadt'' the valley will open significantly. Follow west, heading for the next town ''Altenmark'' at the end of the opening.&lt;br /&gt;
* The railway will bend north at ''Altenmark'' and soon join the Autobahn A10/E55. This is the point we need to go southwest and follow the next valley.&lt;br /&gt;
* The valley leads us westward to the Town of ''St. Johann/Pongau''. probably around the middle of the valley you can spot the prominent ''Mt. Hochkönig'' (2941m) northwest of ''St. Johann'' and the ''Tennengebirge'' to its right.&lt;br /&gt;
* Once reaching ''St. Johann'', continue to follow the next big valley west-southwest.&lt;br /&gt;
* After about 16 miles you will reach ''Zell am See'' (LOWZ) where we will land after around one hour flight time in total. Beware this is a short field.&lt;br /&gt;
&lt;br /&gt;
== Zell am See to Innsbruck via Mt. Venediger ==&lt;br /&gt;
[[File:LOWZ-LOWI.jpg|thumb|The route for Zell am See to Innsbruck]]&lt;br /&gt;
This flight will bring you to two of the core peaks of the Alpenhauptkamm.&lt;br /&gt;
* [https://skyvector.com/?ll=47.201656734623775,12.160079968084839&amp;amp;chart=301&amp;amp;zoom=3&amp;amp;fpl=N0100A120%20LOWZ%20LOWZ%204708N01241E%204708N01221E%204706N01214E%204710N01152E%204724N01150E%20LOWI SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather. There are no usable navaids for this trip.&lt;br /&gt;
* Trip takes around 45 minutes air time at 110 KTAS.&lt;br /&gt;
* Climb to at an altitude of about 10000ft or so after starting from [[:File:Lowz-parking.jpg|Zell am See]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After starting fly into the valley southwest over the town of ''Kaprun''. Maybe you need to circle a bit to gain altitude, near the mountains we need at least about 10000ft!&lt;br /&gt;
* Follow the valley until you overfly two lakes (''Stausee Wasserfallboden'' and ''Moorboden''). To your left you can see ''Mt. Großes Wiesbachhorn'' (3564m).&lt;br /&gt;
* The end of the valley goes over into a flank of the ''Großglockner'' which is near to the south. Follow the west bend of the valley end and fly over the lakes ''Tauernmoossee'' and ''Weißsee''. After you climb out of the valley, you already should see the peak of ''Mt. Venediger'' on the front left. Aim to the saddle right of its peak.&lt;br /&gt;
* You then fly that direction over several valleys that go from south to north, until you hit the very big valley that bend from south to west. The ridgeline right of that valley is the border between the Austrian states Tirol and Salzburg. Follow the valley up to the ''Venediger'', passing the ''Mt. Sandebentörl'' (2751m), still aiming for the saddle.&lt;br /&gt;
* Shortly after you reach the end of the valley and need to overfly the saddle with the glacier ''Venedigerkees'' behind it. The ridgeline is again the border between Tirol and Salzburg. Directly south of the ''Venedigerkees'' is the pyramid of ''Mt. Venediger''.&lt;br /&gt;
* Follow ''Venedigers'' ridge to the southwest, skip the first valley and overfly the next ridge.&lt;br /&gt;
* From here you can deviate into the valley north and visit the ''Krimmler Wasserfälle'', and from there west trough the main valley.&lt;br /&gt;
* If you instead follow the planned route westwards, aim to the peak of ''Mt. Zillerplattenspitze'' (3148m) with the small lake ''Eissee'' to its south flank which you should already see. This is a little hard to get right, but don't fly directly into the big valley but aim right to the second row mountain peaks at about 280 heading.&lt;br /&gt;
* Overfly the ridge with ''Eissee'' and follow the valley from there nothwest with the reservoir ''Zillergründl'' and ''Mt. Reichenspitze'' (3303m) to its right; until you reach the town ''Mayrhofen'' where the current valley meets the ''Zillertal'' valley. You also should start to descend now to about 3500ft with a rate of roughly -1000fpm.&lt;br /&gt;
* From ''Mayrhofen'' follow the ''Zillertal'' valley north and when reaching the ''Inntal'' valley near the town ''Jenbach'', Innsbruck Airport is a few minutes to the west. If you like, you can divert north at ''Jenbach'' to visit ''Achensee'', and even continue further north to land at Munich via lake ''Tegernsee'' or via the Isartal over ''Bad Tölz''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Crossing the alps ==&lt;br /&gt;
[[File:ED02-LIPB.jpg|thumb|The route for Fuessen to Bolzano]]&lt;br /&gt;
This trip brings us from germany via austria to italy, crossing the alps, visiting the famous castle Neuschwanstein and Mt. Zugspitze, germanys highest peak.&lt;br /&gt;
* [https://skyvector.com/?ll=47.068251080980836,10.959411633048108&amp;amp;chart=301&amp;amp;zoom=5&amp;amp;fpl=N01204735N01041E%204734N01045E%204729N01042E%204726N01046E%204724N01054E%204712N01054E%204704N01058E%204656N01103E%204655N01106E%204653N01109E%204650N01110E%204648N01113E%204638N01110E%20LIPB SkyVector route]&lt;br /&gt;
* Suggested plane: C172 or C182&lt;br /&gt;
* This is VFR only, so pick suitable weather and time (I suggest to start with the first light/sunrise).&lt;br /&gt;
* There are no helpful navaids for this trip, but Bolzano NDB: 362 BZO may serve as a final guidance.&lt;br /&gt;
* Trip takes around 45 minutes air time at 120 KTAS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Start at ED02 Fuessen, climb to about 3000 and head southeast to visit castle Neuschwanstein, south of the Forgensee.&lt;br /&gt;
* After looking at the castle (challenge: fly close around behind it), we start climbing to 3500 and aim southwestish and cross over from germany to austria.&lt;br /&gt;
* Fly into the big valley directing south. East of Reutte start climbing 500fpm to 6000 and follow the railway in the valley to the southeast.&lt;br /&gt;
* Once the valley opens significantly, you can see the famous mountain Zugspitze (germanys highest peak, 2962 m) to the front.&lt;br /&gt;
* Head southwards around the Mt. Gartnerwand over town Ehrwald and fly between the two small peaks over the Marienbergjoch mountain pass, 1789m/5870ft (between Mt. Wanning and Mt. Marienberg; challenge: who can make it with the least altitude?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After overflying the second mountain, to the south comes a new valley called Ötzal where you fly into.&lt;br /&gt;
* Follow that valley all the way to the south and slowly climb to at least 8600 now (300fpm or so). Note overflying Längenfelden, where the dominant valley joins from the east with the river Fischbach, halfaway the leg; this looks similar to the end, but isn't.&lt;br /&gt;
* Follow the valley until it starts to branch in all different directions at the end (over the town of Sölden and Zwieselstein).&lt;br /&gt;
* We follow the Southeast main branch and then turn quickly to a smaller valley branching off directly eastwards (look for the mountain pass road).&lt;br /&gt;
* That brings us to the mountain pass of the Timmelsjoch and is the place where we cross over to Italy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* After passing, we can descend to 2500 or so, following the terrain. Follow the valley and its river &amp;quot;Passer&amp;quot; southeast, and follow its bend to the south.&lt;br /&gt;
* Follow the valley and make a nice turn around Mt. Kolbenspitze's east ridge, over San Leonardo, still following the Passer river now southwards.&lt;br /&gt;
* Where the valley hits the next big valley &amp;quot;Etschtal&amp;quot;, is a bigger famous city called Merano. From there we follow the River Etsch and the Autobahn (highway) to the south and are soon approaching the somewhat hidden airport of Bolzano (LIPB) after an estimated time of somewhat under one hour at 120 knots.&lt;br /&gt;
&lt;br /&gt;
From here you can also continue more to the south to Trento (LIDT, total FT ~1:00) or Verona (LIPX, total FT ~1:20) - just follow the river Etsch to the south! Venezia is also not far away, just ~30 minutes/62nm to the east of Verona.&lt;br /&gt;
&lt;br /&gt;
==Grenoble Le-Versoud==&lt;br /&gt;
&lt;br /&gt;
[[Image:LFLG.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
France : '''LFLG'''  ( Grenoble Le-Versoud ) airport : border of Alps&lt;br /&gt;
*P.A.F. home base [http://equipe-flightgear.forumactif.com/ link]&lt;br /&gt;
*Scenery : http://clemaez.fr/flightgear/flightgearfrance_05062011.tar.gz&lt;br /&gt;
*Texture : http://clemaez.fr/flightgear/pattentextures_maj24082011.tar.gz&lt;br /&gt;
&lt;br /&gt;
* Take-off from Grenoble le Versoud (LFLG). Head south following the general direction of the Alps. Bearing left (East) will take you into high alpine territory, while towards the West lie the plains of the Rhône valley. Once you reach the Mediterranean coast, follow it to land in Marseilles (LFML), Nice (LFMN), or another smaller airport serving the French Riviera.&lt;br /&gt;
*Published in [[Custom France Scenery]].&lt;br /&gt;
&lt;br /&gt;
==Gulf of Finland sightseeing tour==&lt;br /&gt;
Take a VFR sightseeing tour over the Gulf of Finland from Helsinki to Tallinn! Estonia's landmarks are all recent additions, while Helsinki was one of the first cities to have original models in the scenery model database.&lt;br /&gt;
&lt;br /&gt;
Take off from the smaller EFHF airfield in Helsinki, or try your luck fighting the virtual traffic at Vantaa, and head toward the port of Helsinki. Look for the Hartwall Arena, the Pasila tower, the railway station and the Olympic Stadium along the way. Make your way out over the Gulf flying just west of south - a heading of 190 should set you up nicely for a sightseeing tour of Tallinn. Try to come in from the west and do a sweeping left turn over the capital of Estonia, looking out for the Swissotel, Olympic Hotel, the Television tower, and other important landmarks in the capital city of Estonia. Make sure you look out for St. Olaf's Church, the tallest building in the capital city. Make your way over the Ulemiste Jarv (lake) to land on runway 09 at Tallinn's main airport.&lt;br /&gt;
&lt;br /&gt;
If you desire, you can do a touch-and-go at Tallinn and set your course southeastward, landing at Tartu Airport, which is also modelled in FlightGear.&lt;br /&gt;
&lt;br /&gt;
The distance between Helsinki and Tallinn is about 50 miles or 80 kilometres, while Tartu is twice the distance from Tallinn at 100 miles/160 kilometres. Fly a heading of 135 to get to Tartu from Tallinn.&lt;br /&gt;
*Published in [[FlightGear Newsletter October 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
==Azores==&lt;br /&gt;
[[Image:LPLA-001.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LPLA-002.png|thumb|right|approaching island]] &lt;br /&gt;
The [http://en.wikipedia.org/wiki/Azores Azores], set in the middle of the Atlantic ocean, has had many names. Fortunate Isles, the Blue Islands, the Islands of Tin and Silver, the Islands of the Seven Cities. We can add, the Islands of Amazing Sights and Flights.&lt;br /&gt;
&lt;br /&gt;
Our flight is to celebrate the amazing views FlightGear can give us.&lt;br /&gt;
&lt;br /&gt;
Start your plane at [[Lajes Field]] (LPLA). This once was an emergency landing site for the [[Space Shuttle]] so you will have plenty of room to take off.&lt;br /&gt;
We will have to fly an odd pattern. The reason for that: if you don't fly too high (stick around 3000 while you can) you will have some amazing views.&lt;br /&gt;
&lt;br /&gt;
Next, fly towards and over LPPD. Look out the window and enjoy the view. Then head out towards LPHR. If you feel LPHR coming near, look out the window good, you might have to pull your plane up.&lt;br /&gt;
&lt;br /&gt;
Happy flying!&lt;br /&gt;
*Published in [[FlightGear Newsletter August 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LPPD-001.png|thumb|left|over the island]]&lt;br /&gt;
[[Image:LPPD-002.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LPLA|LPLA - Lajes Field]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPLA.pdf chart]&lt;br /&gt;
* [[LPPD|LPPD - Ponta del gada]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LPPD.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w020n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Cessna 550 Citation II]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LPLA --aircraft=Citation-II&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Canary Islands Trip ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An archipelago in the middle of the Atlantic sea, stunning beauty where you won't expect it. Seven islands, seven continents, thats what the canarian people say. And it's true, you will face seven totally different islands and nine different airports. &lt;br /&gt;
Take off from the largest one, GCLP, at the main island Gran Canaria. Leave the beautiful island heading to the west, and land at GCTS, the southern airport at Tenerife. Enjoy the view on Spains highest mountain, the glaciered Teide, when flying to La Gomera (GCGM), one of the greenest islands there. Master the short runway, and enjoy the view, before taking the challenge and approach El Hierro (GCHI). A short runway, with cliffs and rocks on both ends will cause you to sweat. From this island, which was claimed to be the western end of the world in medieval times, you'll turn to the beautiful and wild island of La Palma (GCLA). The next approach will be historical, because you are approaching the notorious Tenerife North (GCXO). Yes, I am serious, you will face that airport, where the worst civil plane crash ever took place. But you needn't worry, if you got that far, you will do this approach as easy as any other. The longest flight on your trip will take you to the eastern island, Lanzarote (GCRR). Take a look at the volcanic-red mountains, the vineyards, and the beaches. You want more beaches?? Depart to the south-west, fly over the small island of Los Lobos, and land in the holiday-paradise Fuerteventura. Enjoy dunes, bays, and very nice long beaches, before you finally touch down in Fuerteventura (GCFV). You want to stay? Okay, let's taxi to a parking position, and cut off the engines. If you still want more, fly back to Gran Canaria's GCLP, where we started our trip. &lt;br /&gt;
&lt;br /&gt;
Custom scenery: [[Canary Islands Custom Scenery]] / direct source: https://github.com/D-ECHO/Canarys &lt;br /&gt;
&lt;br /&gt;
=== Suggested Aircraft ===&lt;br /&gt;
&lt;br /&gt;
* small civil aircraft, such as the Cessna Skylane, Skyhawk, or Citation&lt;br /&gt;
* small airliners, like the Q400, the ATR72, the CRJ200, or similar&lt;br /&gt;
&lt;br /&gt;
Route by Flycanarias&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gibraltar==&lt;br /&gt;
[[Image:LEMG-010.png|thumb|left|take off]]&lt;br /&gt;
[[Image:LEMG-011.png|thumb|right|just after take off]] &lt;br /&gt;
Traffic lights turn red, gates are closed. The only busy main road to the peninsula is closed and all the cars and trucks are waiting patiently. Waiting for a train to pass? No. Waiting for a plane to pass since the main road crosses a busy runway.&lt;br /&gt;
&lt;br /&gt;
On both sides water and being crossed by a busy main road can only be one runway: [http://en.wikipedia.org/wiki/Gibraltar_Airport Gibraltar airport]!&lt;br /&gt;
&lt;br /&gt;
One would expect an ILS installed on such a tricky runway but no, you will have to guess where it is and how far away it is. Not even an ADF points to it. &lt;br /&gt;
&lt;br /&gt;
Take off from LEMG (Malaga). Go South-West and find the runway of LXGB somewhere to the right of the rock. Happy guessing!&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2011]] by [[User:PH-JBO|PH-JBO]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Airports and coordinates===&lt;br /&gt;
[[Image:LEMG-013.png|thumb|left|search for this]]&lt;br /&gt;
[[Image:LEMG-015.png|thumb|right|landing]] &lt;br /&gt;
&amp;lt;!--[[Image:World-LLBS.png|thumb|right|Latitude: 31.29037800 Longitude: 34.71922500]]--&amp;gt;&lt;br /&gt;
* [[LEMG|LEMG - Malaga]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LEMG.pdf chart]&lt;br /&gt;
* [[LXGB|LXGB - Gibraltar]] - [http://assistenza.larasrl.net/brisa/fgfs/suggested_flights/LXGB.pdf chart]&lt;br /&gt;
&lt;br /&gt;
required scenery tile: http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Scenery-v2.4.0/w010n30.tgz&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Suggested aircraft===&lt;br /&gt;
* [[Piper Aerostar]]&lt;br /&gt;
&lt;br /&gt;
===FlightGear launching===&lt;br /&gt;
 fgfs --airport=LEMG --aircraft=aerostar700 --adf1=300 --nav1=300:117.80&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Asia=&lt;br /&gt;
==Khorog, Tajikistan==&lt;br /&gt;
[[File:Fw190HinduKush.jpeg|left|thumb|Approaching a bank of snow-covered mountains in the south of the Hindu Kush]]&lt;br /&gt;
Surrounded by spectacular mountains and nestled in the end of a valley, Khorog Airfield (UT1C) makes an interesting place to land. It can only be approached by flying down the curved valley that snakes in from the North. Flying from here to OPCH (Chitral, Pakistan) at around 500ft AGL all the way is a wonderful way to explore the Hindu Kush mountains.&lt;br /&gt;
&lt;br /&gt;
If you bring a piston engined aircraft, be prepared to adjust the mixture as you climb - at the highest point in the flight, you will be at around 22000ft. Also, don't forget to carry plenty of fuel - there are very few airfields in the Hindu Kush that exist in FlightGear. This is a scenery bug that will hopefully be fixed in the future.&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:Armchair Ace| Armchair Ace]], published in [[FlightGear_Newsletter_January_2012#Suggested_flights| Newsletter January 2012]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Central Karakoram range ==&lt;br /&gt;
Let's explore one of the highest regions of the planet - the central Karakoram with the densest concentration of mountains of 8000 m and above. We're going to need a good climbing performance for the trip - even the frozen plateau of Baltoro glacier, above which K2 and Gasherbrum V and VI loom, is more than 13,000 ft high.&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram1.jpg|300px|thumb|left|Circling Gasherbrum I]]&lt;br /&gt;
&lt;br /&gt;
Take off from Skardu airport in Pakistan (OPSD). Skardu has a reasonably long (11,944 ft) runway at just 7,316 ft elevation, so you can take a jet, but for instance the [[De Havilland Canada DHC-6 Twin Otter|Twin Otter]] is more stylish. &lt;br /&gt;
&lt;br /&gt;
South of Skardu lies Deosai park, a famous high plateau, but we turn initially east. There's a chain of lakes which is the Indus river. After about five miles, the Shigar river merges with the Indus. Turn slightly left and follow the Shigar, then follow it into a long and broad lake-filled valley stretching into north-western direction.  &lt;br /&gt;
&lt;br /&gt;
Towards the end of the lake, a small tributary river, the Braldu, turns eastward out of the main valley. Follow the Braldu and start climbing (if you haven't done so yet). About 15 miles after turning into the Braldu river valley, two glacier-filled valleys stretch to the north - admire the view!&lt;br /&gt;
&lt;br /&gt;
[[File:Karakoram2.jpg|300px|thumb|right|Heading back into Skardu, Nanga Parbat on the horizon]]&lt;br /&gt;
&lt;br /&gt;
Passing a few lakes, you reach finally Baltoro glacier continuing the river valley stretching eastward. Ever climbing, follow the glacier till you reach some kind of T-junction. The glacier arm reaching north leads to K2 (which sadly isn't really there in Flightgear), but just ahead of you are the still rather impressive peaks of Gasherbrum V, VI and I - circle the range and make some pictures!&lt;br /&gt;
&lt;br /&gt;
A good way back to Skardu is to go about 10 miles sourth from the Gasherbrum peaks, then head due west.  To your west, you can see the long valleys fall away from the high ranges, to your right is the still glacier-covered high Karakoram. On a clear day (really good visibility selected) you can see the distinctive peak of Nanga Parbat appearing straight ahead on the horizon. The valley of Skardu is quite a distinctive feature and finding back VFR should not be a problem.&lt;br /&gt;
&lt;br /&gt;
Published in [[FlightGear_Newsletter_April_2012#Suggested_flights| Newsletter April 2012]] by [[User:Thosten|Thosten]].&lt;br /&gt;
&lt;br /&gt;
=Africa=&lt;br /&gt;
==Ngorngoro==&lt;br /&gt;
For this [[VFR]] trip we need a strong machine since we will go up from 4000 to about 10,000 feet and since we are in Africa, Tanzania , what better choice is there as the Cessna 208 Caravan, on wheels. We will take off from HTLM, [http://en.wikipedia.org/wiki/Lake_Manyara Lake Manyara], runway 12 (124.5 deg), that has an elevation of 4150 feet. Hit Shift-B so we don't drop off the runway. &lt;br /&gt;
[[File:Map Ngorngoro Crater.jpg|thumb|200px|left|Heightmap with visual reference points]]&lt;br /&gt;
We will have to change some settings before we take off. There is no snow where we are so: View=&amp;gt; Rendering Options=&amp;gt; Snow line=&amp;gt; Set to max. (5000M). We need a reasonable clear sky since there are quite a few bumps we could hit: Environment=&amp;gt; Global weather=&amp;gt; METAR source=&amp;gt; Fair weather.&lt;br /&gt;
&lt;br /&gt;
Give full throttle and take off. Bank left and make a full circle so we gain some altitude and make a mental note of the airstrip, since this is the only one nearby. Look at the road West towards the airfield. &lt;br /&gt;
You will notice that the airstrip is at the edge of a mountain ridge, the lake to the East is quite a lot lower.&lt;br /&gt;
&lt;br /&gt;
We pass over the airstrip towards lake Manyara and turn left keeping the mountains close to our left side, on an initial course of about 30 deg. We keep the mountains to our left and follow our path, our heading will slowly go from 30 to North and takes about 15 mins. During our path we should slowly gain altitude. &lt;br /&gt;
[[File:Ol Doinyo Lengai.jpg|thumb|250px|Mt.Kerimasi (left), Mt.Ol Doinyo Lengai (ahead)]]&lt;br /&gt;
On the '''image''' we see two distinct mountains. The nearest is Mt.Kerimasi, a fun place for hang-gliders, and North Mt.Ol Doinyo Lengai, an active volcano. We are heading straight towards [http://en.wikipedia.org/wiki/Ol_Doinyo_Lengai Mt.Ol Doinyo Lengai]. Just before we would collide we take a sharp left turn heading 225. You will see why we need the altitude now.&lt;br /&gt;
&lt;br /&gt;
The mountain ahead, [http://www.ntz.info/gen/n00161.html#id03702 Mt.Embagai], we see does not appear to be anything spectacular. Aim towards it since we have to go over it. &lt;br /&gt;
Coming nearer, if you are high enough, 9000 feet, you will see why this mountain is well worth a visit. It is a crater with a lake inside, lake Embagai (Empakaai). Enter the crater and look around, careful not to loose any height since we'll have to get out again, we need about 10 000 feet. Mesmerized we grab our compass and take a course of 225 again. To get out we might skim against a cloud, be careful. If you don't see a way out take a turn again to wait for the clouds to move out of sight.&lt;br /&gt;
&lt;br /&gt;
After you managed to get out of the crater keep on the course of 225 while descending slowly for about 9 mins. There are some bumps to avoid, like Mt.Olmoti we keep to the right and Mt.Losirua on the left. &lt;br /&gt;
&lt;br /&gt;
After a small hill we enter one of the most amazing places in Africa, the [http://en.wikipedia.org/wiki/Ngorongoro_Conservation_Area Ngorngoro Crater], the second biggest crater in the world. A micro climate and amazing wildlife.&lt;br /&gt;
Examine the crater and you will notice two lakes, head towards the biggest lake, lake Magadi. When you are above it take a course of 123 to get out of the crater.&lt;br /&gt;
&lt;br /&gt;
After leaving the crater it takes some time before we are near the airstrip again. After about 5 mins we will see a river (left) and a road (right). Follow the road since it will lead us to the airstrip again.&lt;br /&gt;
&lt;br /&gt;
Don't scare the wildebeast!&lt;br /&gt;
&lt;br /&gt;
Notecard:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
#Fair weather, no snow&lt;br /&gt;
#HTLM RW 12 4150 feet&lt;br /&gt;
#Course 30 to 0 deg 15 mins, mountains close left&lt;br /&gt;
#Head towards /\volcano&lt;br /&gt;
#Sharp left turn course 225 deg altitude 9000 feet&lt;br /&gt;
#Volcano, lake, 10 000 feet&lt;br /&gt;
#Course 225 deg, slow descend 9 min&lt;br /&gt;
#Large lake, course 123 deg 5 mins&lt;br /&gt;
#River left, road right. Follow road&lt;br /&gt;
#Landing 124.5 deg 4150 feet.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*October 2011 by [[User:PH-JBO|PH-JBO]]. Published in [[FlightGear_Newsletter_December_2011#Suggested_flights | Newsletter December 2011]].&lt;br /&gt;
==Kisimayu to Kilimanjaro==&lt;br /&gt;
We have to take a big airliner for this trip. The runways are long enough but for this trip we need some altitude and a slow descend.&lt;br /&gt;
&lt;br /&gt;
We park our Big Bird at HCMK, [http://en.wikipedia.org/wiki/Kismayo_Airport Kisimayu], Somalia, near the East coast of Africa. It's unsure what this airfield is used for but it's a long piece of tarmac. I could not find regular flights to and from this airfield, not so strange, there is no lighting, no radio beacons and... no fuel. What you can find is Global Air Rescue that has an air ambulance service based here (with a [http://www.globalairrescue.com/learjet-35.php Learjet 35]).&lt;br /&gt;
&lt;br /&gt;
Our route will be around 425 nm in length. You know your aircraft and know what altitude you will need to fly.&lt;br /&gt;
&lt;br /&gt;
Our destination, HTKJ, [http://en.wikipedia.org/wiki/Kilimanjaro_International_Airport Kilimanjaro], Tanzania, has only one ILS and I have learned, if an airfield has only one ILS there is probably a reason. &lt;br /&gt;
&lt;br /&gt;
Flight Plan (short version):&lt;br /&gt;
#HCMK Kisimayu, length 12,177 ft, no navaids near.&lt;br /&gt;
#GAR Garissa [[VOR-DME]] freq 115.7 heading 268° dist 169 nm.&lt;br /&gt;
#KB Kilimanjaro [[NDB]] freq 393.0 heading 224° dist 258 nm, here is the holding pattern for the Kilimanjaro runway (and there is a [http://en.wikipedia.org/wiki/Mount_Kilimanjaro 19,000 ft] reason for this detour).&lt;br /&gt;
#KV Kilimanjaro VOR-DME freq 115.3 heading 70° dist 26 nm.&lt;br /&gt;
#HTKJ Kilimanjaro [[ILS]] freq 110.9 runway heading 88° elev 2,900 ft [[AMSL]] length 11,807 ft.&lt;br /&gt;
&lt;br /&gt;
Prepare your flight well to receive amazing views of the landscape during the final steps of the route, if you don't you will discover why some pilots call Kilimanjaro Kill-You-Manjaro.&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube | KCJi_ZaR8ec}}&lt;br /&gt;
Youtube video: Kilimanjaro approach in real, in FG not much different.&lt;br /&gt;
&lt;br /&gt;
*February 2012 by [[User:PH-JBO|PH-JBO]].&lt;br /&gt;
&lt;br /&gt;
=Australia and Oceania=&lt;br /&gt;
&lt;br /&gt;
==Hawai'i==&lt;br /&gt;
[[Image:Maui03.jpg|thumb|250px]]&lt;br /&gt;
Do you use [[TerraSync]]? If so, try a flight around Hawaii! Take off from PHNL in a light aircraft and head west until you hit Pearl Harbor; a right turn north will take you post the USS Arizona Memorial, and the Punchbowl Crater will be to your right. Or, fly east from PHNL past volcanic craters Diamond Head and Koko Head. If you follow the O'ahu coastline north from Koko Head, you can land at either old World War II airbase Bellows Field (now a wildlife reserve in real life) or at Keahole MCAS.&lt;br /&gt;
&lt;br /&gt;
For a potentially more scenic route, fly east toward Molokai, and stay to the north (left) of the island. The northern part of Molokai features huge sea cliffs and a tiny airstrip on the Kalaupapa peninsula - the peninsula being the only respite from the cliffs. A former leper colony existed near the airstrip!&lt;br /&gt;
&lt;br /&gt;
Also of interest are the volcanoes on Maui and the 'Big Island' of Hawai'i - flying VFR in a small plane from PHTO to PHKO over the plateau between Mauna Kea and Mauna Loa can be a challenge, as you have to take off from sea level, fly through a pass of 6500 feet, and then drop back down to sea level to land! The Hana coast of northern Maui is also a nice flight - a circumnavigation of Haleakala, starting and ending at PHOG, is quite a nice flight.&lt;br /&gt;
&lt;br /&gt;
The islands will be available through the download center with the next major scenery release, but for now, fire up [[TerraSync]] and your favorite VFR aircraft and have a blast.&lt;br /&gt;
*Published in [[FlightGear Newsletter September 2010]] by [[User:Statto|Statto]].&lt;br /&gt;
&lt;br /&gt;
==Brisbane International Airport to Sydney International Airport==&lt;br /&gt;
Going from Brisbane International Airport to Sydney International Airport. You should have a heading of about 203. Might take sometime to arrive to this section. Maybe 10-30 mins into the flight. Can't really say but don't give up, you will eventually reach this section of the flight. '''''Your eyes will be rewarded!''''' .&lt;br /&gt;
&lt;br /&gt;
[[Image:Fgfs-screen-020.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-016.png|200px]]&lt;br /&gt;
[[Image:Fgfs-screen-012.png|200px]]&lt;br /&gt;
*Published in [[FlightGear Newsletter April 2011]] by [[User:Vin|Vin]]&lt;br /&gt;
&lt;br /&gt;
=Antarctica=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Suggested}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139735</id>
		<title>Howto:Add sound effects to aircraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139735"/>
		<updated>2024-04-20T15:03:34Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Configuration tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can '''add sound effects to aircraft''' by adding the sound samples and configuring the sound effects in XML files.  The sound effects can be conditional and the sound's pitch and volume can depend on properties in the property tree.  &lt;br /&gt;
&lt;br /&gt;
{{note|This text is partially incorrect/outdated. Especially how the final volume/pitch is calculated. Make sure to also read the {{fgdata source|Docs/README.xmlsound|text=official documentation}}.}}&lt;br /&gt;
&lt;br /&gt;
Some sound effects are added other ways.  For example, sounds from avionics like navigation radio receivers are automatically added when you add those radios.&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!|2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/28505220/  | title  = &amp;lt;nowiki&amp;gt;Re: [Flightgear-devel] Stereo sounds no longer supported?&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;syd adams&amp;lt;/nowiki&amp;gt;  | date   = Dec 7th, 2011  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The old way was that the stereo sound would always play the left channel on the left side.  Now you split the sound and place it in 3D space.  When you turn your head, the speaker the left side sound comes out of changes with you|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257291#p257291  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;bugman&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= All sounds must now be mono point sources, and stereo simply requires the two sound sources to be positioned in the 3D environment. |2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/34100151/  | title  = &amp;lt;nowiki&amp;gt;[Flightgear-devel] Audit and proposal for handling non-supported stereo sound files in FGAddon via the 3D sound engine.&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;Edward d'Auvergne&amp;lt;/nowiki&amp;gt;  | date   = May 10th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= We use OpenAL for 3D positional audio and most OpenAL implementations can only handle one stereo file.Also Stereo files will not work in 3d space, so they will not be positional.But  most aircraft developers did not know that and used several stereo files expecting everything to work properly but the truth was that in most implementations just one of those stereo files was played.And if you think of it, stereo separation does not work for boarding music either since it plays left channel to your left ear and right channel to your right ear. But in reality boarding music is played left channel to the left audio channel in the aircraft and right channel to the right audio channel in the aircraft.This works the same as normal stereo if you enter the aircraft, but will, reverse once you turn around.So the solution is to split up the stereo file into two mono files and play the proper channel at the proper side of the passenger compartment.|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257289#p257289  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;erik&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
== Sound configuration files ==&lt;br /&gt;
The sound configuration files are [[PropertyList XML files]].&lt;br /&gt;
&lt;br /&gt;
The top level sound configuration file is composed of a &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt; tag, a &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt; to a sound sample file and zero or more &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; and/or &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;definitions.&lt;br /&gt;
&lt;br /&gt;
Paths are relative to [[$FG_ROOT]], but absolute paths may also be used.&lt;br /&gt;
&lt;br /&gt;
Comments are bracketed with &amp;lt;code&amp;gt;&amp;amp;lt;!-- --&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
This example would define an engine sound effect for a piston engine driven aeroplane.&lt;br /&gt;
&lt;br /&gt;
The sound effect representing the engine is located in &amp;lt;code&amp;gt;$FG_ROOT/Sounds&amp;lt;/code&amp;gt; and is named &amp;lt;code&amp;gt;wasp.wav&amp;lt;/code&amp;gt;. The effect is started when the property &amp;lt;code&amp;gt;/engines/engine/running&amp;lt;/code&amp;gt; becomes non-zero. &lt;br /&gt;
&lt;br /&gt;
When that happens, the sound will be played looped (see &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;) until the property returns zero again. As you can see the volume is dependent on the property &amp;lt;code&amp;gt;/engines/engine/mp-osi&amp;lt;/code&amp;gt;, and the pitch of the sound depends on the property &amp;lt;code&amp;gt;/engines/engine/rpm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;fx&amp;gt;&lt;br /&gt;
  &amp;lt;engine&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;engine&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;Sounds/wasp.wav&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;mode&amp;gt;looped&amp;lt;/mode&amp;gt;&lt;br /&gt;
   &amp;lt;condition&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/running&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/condition&amp;gt;&lt;br /&gt;
   &amp;lt;volume&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/mp-osi&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.005&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.15&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;0.5&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.15&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/volume&amp;gt;&lt;br /&gt;
   &amp;lt;pitch&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/rpm&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.0012&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.3&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;5.0&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.3&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/pitch&amp;gt;&lt;br /&gt;
  &amp;lt;/engine&amp;gt;&lt;br /&gt;
 &amp;lt;/fx&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inclusion from the aircraft-set.xml file ===&lt;br /&gt;
In order for the sound configuration to be used, it has to be included from the [[aircraft-set.xml]] file.&lt;br /&gt;
&lt;br /&gt;
This can be done by adding the path to the file relative to the aircraft's base path within the &amp;lt;code&amp;gt;&amp;amp;lt;sim&amp;amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft-set.xml file..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
   &amp;lt;sound&amp;gt;&lt;br /&gt;
    &amp;lt;path type=&amp;quot;string&amp;quot;&amp;gt;My-sound-config.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;/sound&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;/sim&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration tags ==&lt;br /&gt;
   &lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Named FX subtree living under /sim/sound&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt; ... &amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This is the event separator. The text inside the brackets can be anything, but it is advised to give it a meaningful name like: crank, engine, rumble, gear, squeal, flap, wind or stall.&lt;br /&gt;
 &lt;br /&gt;
: The value can be defined multiple times, thus anything which is related may have the same name (grouping them together).&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the name of the event. This name is used internally and, although it can me defined multiple times in the same file, should normally have an unique value.&lt;br /&gt;
 &lt;br /&gt;
: Multiple definitions of the same name will allow multiple sections to interfere in the starting and stopping of the sample.&lt;br /&gt;
&lt;br /&gt;
: This method can't be used to control the pitch or volume of the sample, but instead multiple volume or pitch section should be included inside the same event.&lt;br /&gt;
&lt;br /&gt;
: The types &amp;quot;raise&amp;quot; and &amp;quot;fall&amp;quot; will stop the playback of the sample regardless of any other event. This means that when the type &amp;quot;raise&amp;quot; is supplied, sample playback will stop when the event turns false. Using the type &amp;quot;fall&amp;quot; will stop playback when the event turns true.&lt;br /&gt;
&lt;br /&gt;
: IMPORTANT&lt;br /&gt;
:: If the trigger is used for anything else but stopping the sound at a certain event, all sections with the same name ''should'' have exactly the same sections for everything but property and type.&lt;br /&gt;
&lt;br /&gt;
:: In the case of just stopping the sample at a certain event, the sections for path, volume and pitch may be omitted.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defined the path to the sound file. The path is relative to the FlightGear root directory but could be specified absolute.&lt;br /&gt;
&lt;br /&gt;
: The sound format must be mono.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define a condition that triggers the event.&lt;br /&gt;
&lt;br /&gt;
: For a complete description of the FlightGear conditions, please read docs-mini/README.conditions or read the [[Conditions]] article on the wikie.&lt;br /&gt;
&lt;br /&gt;
: An event should define either a condition or a property.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define which property triggers the event, and refers to a node in the FlightGear property tree.&lt;br /&gt;
&lt;br /&gt;
: Action is taken when the property is non zero.&lt;br /&gt;
&lt;br /&gt;
: A more sophisticated mechanism to trigger the event is described in &amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines how the sample should be played:&lt;br /&gt;
 &lt;br /&gt;
:; once&lt;br /&gt;
:: The sample is played once. This is the default.&lt;br /&gt;
 &lt;br /&gt;
:; looped&lt;br /&gt;
:: The sample plays continuously, until the event turns false.&lt;br /&gt;
&lt;br /&gt;
:; in-transit&lt;br /&gt;
:: the sample plays continuously, while the property is changing its value.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the type of this sample, each type also have seperate volume slider in sound settings menu:&lt;br /&gt;
&lt;br /&gt;
:; fx&lt;br /&gt;
:: This is the default type and doesn't need to be defined.&lt;br /&gt;
&lt;br /&gt;
:; avionics&lt;br /&gt;
:: Sounds set to this type don't have a position and orientation but are treated as if it's mounted to the aircraft panel.&lt;br /&gt;
&lt;br /&gt;
:: It is up to the user to define if it can always be heard or only when in cockpit view.&lt;br /&gt;
&lt;br /&gt;
:; atc&lt;br /&gt;
:: Is used by the ATC chatter add-on.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;delay-sec&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Delay after which the sound starts playing.&lt;br /&gt;
&lt;br /&gt;
: This is useful to let a property start two sounds at the same time, where the second is delayed until the first stopped playing.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Volume or Pitch definition.&lt;br /&gt;
&lt;br /&gt;
: Currently there may be up to 5 volume and up to 5 pitch definitions defined within one sound event.&lt;br /&gt;
&lt;br /&gt;
: There are two important results from each &amp;lt;volume&amp;gt; and &amp;lt;pitch&amp;gt; section: the offset and the value. Normally all offset values from the different volume/pitch are added together to create the total offset.  The values from each &amp;lt;volume&amp;gt; or &amp;lt;pitch&amp;gt; section are multiplied together to create an final value.  Then the volume (or pitch, respectively) is set to total offset + final value.&lt;br /&gt;
&lt;br /&gt;
: A special condition occurs when the value of factor is negative, in which case the offset doesn't get added to the other offset values but instead will be used in the multiplication section.&lt;br /&gt;
&lt;br /&gt;
: Pitch final output can range from 0 to 2. 1 represents the original pitch of the sound file.  Offset defaults to 1, meaning that if no specific &amp;lt;pitch&amp;gt; parameters are given the file will be played at its original pitch.&lt;br /&gt;
&lt;br /&gt;
: Volume final output can range from 0 to 1. 1 represents full volume and 0 is silence.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines an [[Expressions|expression]], and will replace all other tags in this volume/pitch tag.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which property supplies the value for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: Either a &amp;lt;property&amp;gt; or an &amp;lt;internal&amp;gt; should be defined.  If none is defined, the property reverts to its default.  For volume this is 0, meaning the sound will not be audible at all.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;internal&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which internal variable should be used for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:: The following internals are available at this time:&lt;br /&gt;
&lt;br /&gt;
::; dt_play&lt;br /&gt;
::: The number of seconds since the sound started playing.&lt;br /&gt;
&lt;br /&gt;
::; dt_stop&lt;br /&gt;
::: The number of seconds after the sound has stopped.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the function that should be used upon the property before it is used for calculating the net result:&lt;br /&gt;
&lt;br /&gt;
::; lin&lt;br /&gt;
::: Linear handling of the property value. This is the default.&lt;br /&gt;
 &lt;br /&gt;
::; ln&lt;br /&gt;
:: Convert the property value to a natural logarithmic value before scaling it.&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
 &lt;br /&gt;
::; log&lt;br /&gt;
::: convert the property value to a true logarithmic value before scaling it. (log base 10)&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
&lt;br /&gt;
::; inv&lt;br /&gt;
::: Inverse linear handling (1/x).&lt;br /&gt;
&lt;br /&gt;
::; abs&lt;br /&gt;
:: Absolute handling of the value (always positive).&lt;br /&gt;
&lt;br /&gt;
::; sqrt&lt;br /&gt;
::: Calculate the square root of the absolute value before scaling it.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;factor&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the multiplication factor for the property value.&lt;br /&gt;
&lt;br /&gt;
:: A special condition is when scale is defined as a negative value. In this case the result of |&amp;lt;scale&amp;gt;| * &amp;lt;property) will be subtracted from &amp;amp;lt;default&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;offset&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: The initial value for this sound.&lt;br /&gt;
&lt;br /&gt;
:: This value is also used as an offset value for calculating the end result.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;random&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Add a bit of randomness to the offset. Only used for pitch.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;min&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Minimum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds start to sound funny. Anything lower will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;max&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Maximum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds gets to loud. Anything higher will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:: Keep in mind that min &amp;amp; max are applied first, then offset.  So for example if min = 0, max = 0.5 and offset = 1.0, then the resulting values will range 1 to 1.5.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;position&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the position of the sounds source relative to the 3D models center.&lt;br /&gt;
&lt;br /&gt;
: The coordinate system used is a left hand coordinate system where +Y = left, -Y = right, -Z = down, +Z = up, -X = forward, +X = aft.  Distances are in meters.&lt;br /&gt;
&lt;br /&gt;
: It's important to note that for sounds the Y axis is inverted compared to e.g. object animation coordinates (see also [[Howto:3D_Aircraft_Models]]).&lt;br /&gt;
&lt;br /&gt;
: The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!&lt;br /&gt;
&lt;br /&gt;
: Also take notice that the values should not be 0.0, since that can produce sound artifacts on some sound cards.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension offset (-X = forward, +X = aft, in meters)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension offset (+Y = left, -Y = right)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension offset (-Z = down, +Z = up)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;orientation&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the orientation of the sounds source.&lt;br /&gt;
&lt;br /&gt;
: The zero vector is default, indicating that a Source is not directional.&lt;br /&gt;
&lt;br /&gt;
: Specifying a non-zero vector will make the Source directional in the X,Y,Z direction&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;inner-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The inner edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound withing that angle will be played at the current gain.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The outer edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound beyond the outer cone will be played at &amp;quot;outer-gain&amp;quot; volume.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-gain&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The gain at the outer edge of the cone.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;reference-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set a reference distance of sound in meters. This is the distance where the volume is at its maximum. Default is 60.&lt;br /&gt;
&lt;br /&gt;
: Volume is clamped to this maximum for any distance below.&lt;br /&gt;
&lt;br /&gt;
: Volume is attenuated for any distance above.&lt;br /&gt;
&lt;br /&gt;
: Attenuation depends on reference and maximum distance. See OpenAL specification on &amp;quot;AL_INVERSE_DISTANCE_CLAMPED&amp;quot; mode for details on exact computation.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set the maximum audible distance for the sound in meters. Default is 6000.&lt;br /&gt;
&lt;br /&gt;
: Sound is cut-off above this distance.&lt;br /&gt;
&lt;br /&gt;
== Creating a configuration file ==&lt;br /&gt;
&lt;br /&gt;
To make things easy, there is a default value for most entries to allow a&lt;br /&gt;
sane configuration when a certain entry is omitted.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag !! Default value&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;type&amp;amp;gt;''' || lin&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;factor&amp;amp;gt;''' || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;offset&amp;amp;gt;''' || 0.0 for volume, 1.0 for pitch&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;min&amp;amp;gt;''' || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;max&amp;amp;gt;''' || 0.0 (don't check)&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Calculations are made the following way (for both pitch and volume):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
value = 0;&lt;br /&gt;
offs = 0;&lt;br /&gt;
&lt;br /&gt;
for (n = 0; n &amp;lt; max; n++) {&lt;br /&gt;
    if (factor &amp;lt; 0) {&lt;br /&gt;
        value += offset[n] - abs(factor[n]) * function(property[n]);&lt;br /&gt;
    } else {&lt;br /&gt;
        value *= factor[n] * function(property[n]);&lt;br /&gt;
        offs += offset[n];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
volume = offs + value;&lt;br /&gt;
if (volume &amp;gt; 1.0) vol = 1.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
where function can be one of: lin, ln, log, inv, abs or sqrt&lt;br /&gt;
&lt;br /&gt;
== Multiplayer sound ==&lt;br /&gt;
The multiplayer sound file works just as the normal sound file, except it should reside in &amp;lt;code&amp;gt;/sim/model/sound&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;/sim/sound&amp;lt;/code&amp;gt;. Make sure it depends on properties that are [[Howto:Transmit_properties_over_MP|transmitted over MP]].&lt;br /&gt;
&lt;br /&gt;
An example could be found in FGAddon 777-200: {{fgaddon aircraft url|777}}&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-set.xml&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; (this is not mandatory, just here to explain the inheritance. The -set.xml does/can include the model directly)&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; references &amp;lt;code&amp;gt;Aircraft/777/Models/777-200.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Models/777-200.xml&amp;lt;/code&amp;gt; has an &amp;lt;code&amp;gt;&amp;lt;sound&amp;gt;&amp;lt;path&amp;gt;Aircraft/777/Sounds/mp-sound.xml&amp;lt;/path&amp;gt;&amp;lt;/sound&amp;gt;&amp;lt;/code&amp;gt; reference&lt;br /&gt;
* &amp;lt;code&amp;gt;Sounds/mp-sound.xml&amp;lt;/code&amp;gt; contains an ordinary sound config file with relative property paths resolved to the relative &amp;lt;code&amp;gt;/ai/models/multiplayer/&amp;lt;/code&amp;gt; nodes of the multiplayer instance.&lt;br /&gt;
* The result is a subnode &amp;lt;code&amp;gt;/ai/models/multiplayer/sim/sound&amp;lt;/code&amp;gt;, with a &amp;quot;path&amp;quot; node pointing to &amp;lt;code&amp;gt;Aircraft/777/Sounds/mps-sound.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Recommended audio file formats ==&lt;br /&gt;
{{note|The sound sample '''must be in mono''' format.  This is because it can not be put in a 3D context otherwise. Also, as of at least June 2015 '''stereo samples will not be played'''.}}&lt;br /&gt;
&lt;br /&gt;
There some considerations on the quality to the audio files. As a rule of thumb, any computer is able to playback sounds in DVD-quality (48 kHz/24 bits).&lt;br /&gt;
Macs still has trouble reading 32 bit files. Most standard sound cards also can't playback 32 bit files.&lt;br /&gt;
&lt;br /&gt;
From a listeners point of view, anything above 44.1 kHz and 24 bits is only useful for high end music. Personally, I would think that 44.1 kHz with 16 bits should be more than enough to play engine sounds and alarms from the cockpit. Consider the disk-space against the gain in audio quality!&lt;br /&gt;
&lt;br /&gt;
== Preventing sounds from playing when sim starts ==&lt;br /&gt;
Some times it can be hard to prevent sounds from playing right away, if the condition starts to evaluate to true. A hack to get this to work is to multiply the volume with a property that you in nasal set to true some seconds after the sim has been initialized.&lt;br /&gt;
&lt;br /&gt;
== Bugs in the sound system ==&lt;br /&gt;
* The Doppler effect if you pass an aircraft in high speed sometimes is way too high pitch.&lt;br /&gt;
* None of the position coordinates must not be 0.0 as described above.&lt;br /&gt;
* Sounds using &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt; 'once' together with &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt; behave incorrectly when going out of range of the sound, then back in range, all while the trigger condition remains true:&lt;br /&gt;
** Until January 2023 (Flightgear 2020.3): the above causes the sound to incorrectly restart playing.&lt;br /&gt;
** Since January 2023 (for development versions): the sound stops entirely when going out of range, it is not possible to come back in range to hear the end of the sound.&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Conditions]]&lt;br /&gt;
* [[Expressions]]&lt;br /&gt;
* [[Howto:Reload sound configuration without restarting]]&lt;br /&gt;
&lt;br /&gt;
=== Readme file ===&lt;br /&gt;
* {{readme file|xmlsound}}&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.hxx}}&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.cxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.hxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.cxx}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139734</id>
		<title>Howto:Add sound effects to aircraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139734"/>
		<updated>2024-04-20T14:38:04Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Multiplayer sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can '''add sound effects to aircraft''' by adding the sound samples and configuring the sound effects in XML files.  The sound effects can be conditional and the sound's pitch and volume can depend on properties in the property tree.  &lt;br /&gt;
&lt;br /&gt;
{{note|This text is partially incorrect/outdated. Especially how the final volume/pitch is calculated. Make sure to also read the {{fgdata source|Docs/README.xmlsound|text=official documentation}}.}}&lt;br /&gt;
&lt;br /&gt;
Some sound effects are added other ways.  For example, sounds from avionics like navigation radio receivers are automatically added when you add those radios.&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!|2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/28505220/  | title  = &amp;lt;nowiki&amp;gt;Re: [Flightgear-devel] Stereo sounds no longer supported?&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;syd adams&amp;lt;/nowiki&amp;gt;  | date   = Dec 7th, 2011  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The old way was that the stereo sound would always play the left channel on the left side.  Now you split the sound and place it in 3D space.  When you turn your head, the speaker the left side sound comes out of changes with you|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257291#p257291  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;bugman&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= All sounds must now be mono point sources, and stereo simply requires the two sound sources to be positioned in the 3D environment. |2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/34100151/  | title  = &amp;lt;nowiki&amp;gt;[Flightgear-devel] Audit and proposal for handling non-supported stereo sound files in FGAddon via the 3D sound engine.&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;Edward d'Auvergne&amp;lt;/nowiki&amp;gt;  | date   = May 10th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= We use OpenAL for 3D positional audio and most OpenAL implementations can only handle one stereo file.Also Stereo files will not work in 3d space, so they will not be positional.But  most aircraft developers did not know that and used several stereo files expecting everything to work properly but the truth was that in most implementations just one of those stereo files was played.And if you think of it, stereo separation does not work for boarding music either since it plays left channel to your left ear and right channel to your right ear. But in reality boarding music is played left channel to the left audio channel in the aircraft and right channel to the right audio channel in the aircraft.This works the same as normal stereo if you enter the aircraft, but will, reverse once you turn around.So the solution is to split up the stereo file into two mono files and play the proper channel at the proper side of the passenger compartment.|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257289#p257289  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;erik&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
== Sound configuration files ==&lt;br /&gt;
The sound configuration files are [[PropertyList XML files]].&lt;br /&gt;
&lt;br /&gt;
The top level sound configuration file is composed of a &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt; tag, a &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt; to a sound sample file and zero or more &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; and/or &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;definitions.&lt;br /&gt;
&lt;br /&gt;
Paths are relative to [[$FG_ROOT]], but absolute paths may also be used.&lt;br /&gt;
&lt;br /&gt;
Comments are bracketed with &amp;lt;code&amp;gt;&amp;amp;lt;!-- --&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
This example would define an engine sound effect for a piston engine driven aeroplane.&lt;br /&gt;
&lt;br /&gt;
The sound effect representing the engine is located in &amp;lt;code&amp;gt;$FG_ROOT/Sounds&amp;lt;/code&amp;gt; and is named &amp;lt;code&amp;gt;wasp.wav&amp;lt;/code&amp;gt;. The effect is started when the property &amp;lt;code&amp;gt;/engines/engine/running&amp;lt;/code&amp;gt; becomes non-zero. &lt;br /&gt;
&lt;br /&gt;
When that happens, the sound will be played looped (see &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;) until the property returns zero again. As you can see the volume is dependent on the property &amp;lt;code&amp;gt;/engines/engine/mp-osi&amp;lt;/code&amp;gt;, and the pitch of the sound depends on the property &amp;lt;code&amp;gt;/engines/engine/rpm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;fx&amp;gt;&lt;br /&gt;
  &amp;lt;engine&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;engine&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;Sounds/wasp.wav&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;mode&amp;gt;looped&amp;lt;/mode&amp;gt;&lt;br /&gt;
   &amp;lt;condition&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/running&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/condition&amp;gt;&lt;br /&gt;
   &amp;lt;volume&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/mp-osi&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.005&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.15&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;0.5&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.15&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/volume&amp;gt;&lt;br /&gt;
   &amp;lt;pitch&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/rpm&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.0012&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.3&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;5.0&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.3&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/pitch&amp;gt;&lt;br /&gt;
  &amp;lt;/engine&amp;gt;&lt;br /&gt;
 &amp;lt;/fx&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inclusion from the aircraft-set.xml file ===&lt;br /&gt;
In order for the sound configuration to be used, it has to be included from the [[aircraft-set.xml]] file.&lt;br /&gt;
&lt;br /&gt;
This can be done by adding the path to the file relative to the aircraft's base path within the &amp;lt;code&amp;gt;&amp;amp;lt;sim&amp;amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft-set.xml file..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
   &amp;lt;sound&amp;gt;&lt;br /&gt;
    &amp;lt;path type=&amp;quot;string&amp;quot;&amp;gt;My-sound-config.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;/sound&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;/sim&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration tags ==&lt;br /&gt;
   &lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Named FX subtree living under /sim/sound&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt; ... &amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This is the event separator. The text inside the brackets can be anything, but it is advised to give it a meaningful name like: crank, engine, rumble, gear, squeal, flap, wind or stall.&lt;br /&gt;
 &lt;br /&gt;
: The value can be defined multiple times, thus anything which is related may have the same name (grouping them together).&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the name of the event. This name is used internally and, although it can me defined multiple times in the same file, should normally have an unique value.&lt;br /&gt;
 &lt;br /&gt;
: Multiple definitions of the same name will allow multiple sections to interfere in the starting and stopping of the sample.&lt;br /&gt;
&lt;br /&gt;
: This method can't be used to control the pitch or volume of the sample, but instead multiple volume or pitch section should be included inside the same event.&lt;br /&gt;
&lt;br /&gt;
: The types &amp;quot;raise&amp;quot; and &amp;quot;fall&amp;quot; will stop the playback of the sample regardless of any other event. This means that when the type &amp;quot;raise&amp;quot; is supplied, sample playback will stop when the event turns false. Using the type &amp;quot;fall&amp;quot; will stop playback when the event turns true.&lt;br /&gt;
&lt;br /&gt;
: IMPORTANT&lt;br /&gt;
:: If the trigger is used for anything else but stopping the sound at a certain event, all sections with the same name ''should'' have exactly the same sections for everything but property and type.&lt;br /&gt;
&lt;br /&gt;
:: In the case of just stopping the sample at a certain event, the sections for path, volume and pitch may be omitted.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defined the path to the sound file. The path is relative to the FlightGear root directory but could be specified absolute.&lt;br /&gt;
&lt;br /&gt;
: The sound format must be mono.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define a condition that triggers the event.&lt;br /&gt;
&lt;br /&gt;
: For a complete description of the FlightGear conditions, please read docs-mini/README.conditions or read the [[Conditions]] article on the wikie.&lt;br /&gt;
&lt;br /&gt;
: An event should define either a condition or a property.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define which property triggers the event, and refers to a node in the FlightGear property tree.&lt;br /&gt;
&lt;br /&gt;
: Action is taken when the property is non zero.&lt;br /&gt;
&lt;br /&gt;
: A more sophisticated mechanism to trigger the event is described in &amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines how the sample should be played:&lt;br /&gt;
 &lt;br /&gt;
:; once&lt;br /&gt;
:: The sample is played once. This is the default.&lt;br /&gt;
 &lt;br /&gt;
:; looped&lt;br /&gt;
:: The sample plays continuously, until the event turns false.&lt;br /&gt;
&lt;br /&gt;
:; in-transit&lt;br /&gt;
:: the sample plays continuously, while the property is changing its value.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the type of this sample, each type also have seperate volume slider in sound settings menu:&lt;br /&gt;
&lt;br /&gt;
:; fx&lt;br /&gt;
:: This is the default type and doesn't need to be defined.&lt;br /&gt;
&lt;br /&gt;
:; avionics&lt;br /&gt;
:: Sounds set to this type don't have a position and orientation but are treated as if it's mounted to the aircraft panel.&lt;br /&gt;
&lt;br /&gt;
:: It is up to the user to define if it can always be heard or only when in cockpit view.&lt;br /&gt;
&lt;br /&gt;
:; atc&lt;br /&gt;
:: Is used by the ATC chatter add-on.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;delay-sec&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Delay after which the sound starts playing.&lt;br /&gt;
&lt;br /&gt;
: This is useful to let a property start two sounds at the same time, where the second is delayed until the first stopped playing.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Volume or Pitch definition.&lt;br /&gt;
&lt;br /&gt;
: Currently there may be up to 5 volume and up to 5 pitch definitions defined within one sound event.&lt;br /&gt;
&lt;br /&gt;
: There are two important results from each &amp;lt;volume&amp;gt; and &amp;lt;pitch&amp;gt; section: the offset and the value. Normally all offset values from the different volume/pitch are added together to create the total offset.  The values from each &amp;lt;volume&amp;gt; or &amp;lt;pitch&amp;gt; section are multiplied together to create an final value.  Then the volume (or pitch, respectively) is set to total offset + final value.&lt;br /&gt;
&lt;br /&gt;
: A special condition occurs when the value of factor is negative, in which case the offset doesn't get added to the other offset values but instead will be used in the multiplication section.&lt;br /&gt;
&lt;br /&gt;
: Pitch final output can range from 0 to 2. 1 represents the original pitch of the sound file.  Offset defaults to 1, meaning that if no specific &amp;lt;pitch&amp;gt; parameters are given the file will be played at its original pitch.&lt;br /&gt;
&lt;br /&gt;
: Volume final output can range from 0 to 1. 1 represents full volume and 0 is silence.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines an expression, and will replace all other tags in this volume/pitch tag.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which property supplies the value for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: Either a &amp;lt;property&amp;gt; or an &amp;lt;internal&amp;gt; should be defined.  If none is defined, the property reverts to its default.  For volume this is 0, meaning the sound will not be audible at all.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;internal&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which internal variable should be used for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:: The following internals are available at this time:&lt;br /&gt;
&lt;br /&gt;
::; dt_play&lt;br /&gt;
::: The number of seconds since the sound started playing.&lt;br /&gt;
&lt;br /&gt;
::; dt_stop&lt;br /&gt;
::: The number of seconds after the sound has stopped.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the function that should be used upon the property before it is used for calculating the net result:&lt;br /&gt;
&lt;br /&gt;
::; lin&lt;br /&gt;
::: Linear handling of the property value. This is the default.&lt;br /&gt;
 &lt;br /&gt;
::; ln&lt;br /&gt;
:: Convert the property value to a natural logarithmic value before scaling it.&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
 &lt;br /&gt;
::; log&lt;br /&gt;
::: convert the property value to a true logarithmic value before scaling it. (log base 10)&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
&lt;br /&gt;
::; inv&lt;br /&gt;
::: Inverse linear handling (1/x).&lt;br /&gt;
&lt;br /&gt;
::; abs&lt;br /&gt;
:: Absolute handling of the value (always positive).&lt;br /&gt;
&lt;br /&gt;
::; sqrt&lt;br /&gt;
::: Calculate the square root of the absolute value before scaling it.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;factor&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the multiplication factor for the property value.&lt;br /&gt;
&lt;br /&gt;
:: A special condition is when scale is defined as a negative value. In this case the result of |&amp;lt;scale&amp;gt;| * &amp;lt;property) will be subtracted from &amp;amp;lt;default&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;offset&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: The initial value for this sound.&lt;br /&gt;
&lt;br /&gt;
:: This value is also used as an offset value for calculating the end result.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;random&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Add a bit of randomness to the offset. Only used for pitch.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;min&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Minimum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds start to sound funny. Anything lower will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;max&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Maximum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds gets to loud. Anything higher will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:: Keep in mind that min &amp;amp; max are applied first, then offset.  So for example if min = 0, max = 0.5 and offset = 1.0, then the resulting values will range 1 to 1.5.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;position&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the position of the sounds source relative to the 3D models center.&lt;br /&gt;
&lt;br /&gt;
: The coordinate system used is a left hand coordinate system where +Y = left, -Y = right, -Z = down, +Z = up, -X = forward, +X = aft.  Distances are in meters.&lt;br /&gt;
&lt;br /&gt;
: It's important to note that for sounds the Y axis is inverted compared to e.g. object animation coordinates (see also [[Howto:3D_Aircraft_Models]]).&lt;br /&gt;
&lt;br /&gt;
: The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!&lt;br /&gt;
&lt;br /&gt;
: Also take notice that the values should not be 0.0, since that can produce sound artifacts on some sound cards.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension offset (-X = forward, +X = aft, in meters)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension offset (+Y = left, -Y = right)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension offset (-Z = down, +Z = up)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;orientation&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the orientation of the sounds source.&lt;br /&gt;
&lt;br /&gt;
: The zero vector is default, indicating that a Source is not directional.&lt;br /&gt;
&lt;br /&gt;
: Specifying a non-zero vector will make the Source directional in the X,Y,Z direction&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;inner-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The inner edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound withing that angle will be played at the current gain.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The outer edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound beyond the outer cone will be played at &amp;quot;outer-gain&amp;quot; volume.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-gain&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The gain at the outer edge of the cone.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;reference-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set a reference distance of sound in meters. This is the distance where the volume is at its maximum. Default is 60.&lt;br /&gt;
&lt;br /&gt;
: Volume is clamped to this maximum for any distance below.&lt;br /&gt;
&lt;br /&gt;
: Volume is attenuated for any distance above.&lt;br /&gt;
&lt;br /&gt;
: Attenuation depends on reference and maximum distance. See OpenAL specification on &amp;quot;AL_INVERSE_DISTANCE_CLAMPED&amp;quot; mode for details on exact computation.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set the maximum audible distance for the sound in meters. Default is 6000.&lt;br /&gt;
&lt;br /&gt;
: Sound is cut-off above this distance.&lt;br /&gt;
&lt;br /&gt;
== Creating a configuration file ==&lt;br /&gt;
&lt;br /&gt;
To make things easy, there is a default value for most entries to allow a&lt;br /&gt;
sane configuration when a certain entry is omitted.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag !! Default value&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;type&amp;amp;gt;''' || lin&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;factor&amp;amp;gt;''' || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;offset&amp;amp;gt;''' || 0.0 for volume, 1.0 for pitch&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;min&amp;amp;gt;''' || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;max&amp;amp;gt;''' || 0.0 (don't check)&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Calculations are made the following way (for both pitch and volume):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
value = 0;&lt;br /&gt;
offs = 0;&lt;br /&gt;
&lt;br /&gt;
for (n = 0; n &amp;lt; max; n++) {&lt;br /&gt;
    if (factor &amp;lt; 0) {&lt;br /&gt;
        value += offset[n] - abs(factor[n]) * function(property[n]);&lt;br /&gt;
    } else {&lt;br /&gt;
        value *= factor[n] * function(property[n]);&lt;br /&gt;
        offs += offset[n];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
volume = offs + value;&lt;br /&gt;
if (volume &amp;gt; 1.0) vol = 1.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
where function can be one of: lin, ln, log, inv, abs or sqrt&lt;br /&gt;
&lt;br /&gt;
== Multiplayer sound ==&lt;br /&gt;
The multiplayer sound file works just as the normal sound file, except it should reside in &amp;lt;code&amp;gt;/sim/model/sound&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;/sim/sound&amp;lt;/code&amp;gt;. Make sure it depends on properties that are [[Howto:Transmit_properties_over_MP|transmitted over MP]].&lt;br /&gt;
&lt;br /&gt;
An example could be found in FGAddon 777-200: {{fgaddon aircraft url|777}}&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-set.xml&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; (this is not mandatory, just here to explain the inheritance. The -set.xml does/can include the model directly)&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; references &amp;lt;code&amp;gt;Aircraft/777/Models/777-200.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Models/777-200.xml&amp;lt;/code&amp;gt; has an &amp;lt;code&amp;gt;&amp;lt;sound&amp;gt;&amp;lt;path&amp;gt;Aircraft/777/Sounds/mp-sound.xml&amp;lt;/path&amp;gt;&amp;lt;/sound&amp;gt;&amp;lt;/code&amp;gt; reference&lt;br /&gt;
* &amp;lt;code&amp;gt;Sounds/mp-sound.xml&amp;lt;/code&amp;gt; contains an ordinary sound config file with relative property paths resolved to the relative &amp;lt;code&amp;gt;/ai/models/multiplayer/&amp;lt;/code&amp;gt; nodes of the multiplayer instance.&lt;br /&gt;
* The result is a subnode &amp;lt;code&amp;gt;/ai/models/multiplayer/sim/sound&amp;lt;/code&amp;gt;, with a &amp;quot;path&amp;quot; node pointing to &amp;lt;code&amp;gt;Aircraft/777/Sounds/mps-sound.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Recommended audio file formats ==&lt;br /&gt;
{{note|The sound sample '''must be in mono''' format.  This is because it can not be put in a 3D context otherwise. Also, as of at least June 2015 '''stereo samples will not be played'''.}}&lt;br /&gt;
&lt;br /&gt;
There some considerations on the quality to the audio files. As a rule of thumb, any computer is able to playback sounds in DVD-quality (48 kHz/24 bits).&lt;br /&gt;
Macs still has trouble reading 32 bit files. Most standard sound cards also can't playback 32 bit files.&lt;br /&gt;
&lt;br /&gt;
From a listeners point of view, anything above 44.1 kHz and 24 bits is only useful for high end music. Personally, I would think that 44.1 kHz with 16 bits should be more than enough to play engine sounds and alarms from the cockpit. Consider the disk-space against the gain in audio quality!&lt;br /&gt;
&lt;br /&gt;
== Preventing sounds from playing when sim starts ==&lt;br /&gt;
Some times it can be hard to prevent sounds from playing right away, if the condition starts to evaluate to true. A hack to get this to work is to multiply the volume with a property that you in nasal set to true some seconds after the sim has been initialized.&lt;br /&gt;
&lt;br /&gt;
== Bugs in the sound system ==&lt;br /&gt;
* The Doppler effect if you pass an aircraft in high speed sometimes is way too high pitch.&lt;br /&gt;
* None of the position coordinates must not be 0.0 as described above.&lt;br /&gt;
* Sounds using &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt; 'once' together with &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt; behave incorrectly when going out of range of the sound, then back in range, all while the trigger condition remains true:&lt;br /&gt;
** Until January 2023 (Flightgear 2020.3): the above causes the sound to incorrectly restart playing.&lt;br /&gt;
** Since January 2023 (for development versions): the sound stops entirely when going out of range, it is not possible to come back in range to hear the end of the sound.&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Conditions]]&lt;br /&gt;
* [[Expressions]]&lt;br /&gt;
* [[Howto:Reload sound configuration without restarting]]&lt;br /&gt;
&lt;br /&gt;
=== Readme file ===&lt;br /&gt;
* {{readme file|xmlsound}}&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.hxx}}&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.cxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.hxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.cxx}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139733</id>
		<title>Howto:Add sound effects to aircraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139733"/>
		<updated>2024-04-20T13:37:04Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Multiplayer sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can '''add sound effects to aircraft''' by adding the sound samples and configuring the sound effects in XML files.  The sound effects can be conditional and the sound's pitch and volume can depend on properties in the property tree.  &lt;br /&gt;
&lt;br /&gt;
{{note|This text is partially incorrect/outdated. Especially how the final volume/pitch is calculated. Make sure to also read the {{fgdata source|Docs/README.xmlsound|text=official documentation}}.}}&lt;br /&gt;
&lt;br /&gt;
Some sound effects are added other ways.  For example, sounds from avionics like navigation radio receivers are automatically added when you add those radios.&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!|2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/28505220/  | title  = &amp;lt;nowiki&amp;gt;Re: [Flightgear-devel] Stereo sounds no longer supported?&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;syd adams&amp;lt;/nowiki&amp;gt;  | date   = Dec 7th, 2011  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The old way was that the stereo sound would always play the left channel on the left side.  Now you split the sound and place it in 3D space.  When you turn your head, the speaker the left side sound comes out of changes with you|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257291#p257291  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;bugman&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= All sounds must now be mono point sources, and stereo simply requires the two sound sources to be positioned in the 3D environment. |2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/34100151/  | title  = &amp;lt;nowiki&amp;gt;[Flightgear-devel] Audit and proposal for handling non-supported stereo sound files in FGAddon via the 3D sound engine.&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;Edward d'Auvergne&amp;lt;/nowiki&amp;gt;  | date   = May 10th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= We use OpenAL for 3D positional audio and most OpenAL implementations can only handle one stereo file.Also Stereo files will not work in 3d space, so they will not be positional.But  most aircraft developers did not know that and used several stereo files expecting everything to work properly but the truth was that in most implementations just one of those stereo files was played.And if you think of it, stereo separation does not work for boarding music either since it plays left channel to your left ear and right channel to your right ear. But in reality boarding music is played left channel to the left audio channel in the aircraft and right channel to the right audio channel in the aircraft.This works the same as normal stereo if you enter the aircraft, but will, reverse once you turn around.So the solution is to split up the stereo file into two mono files and play the proper channel at the proper side of the passenger compartment.|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257289#p257289  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;erik&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
== Sound configuration files ==&lt;br /&gt;
The sound configuration files are [[PropertyList XML files]].&lt;br /&gt;
&lt;br /&gt;
The top level sound configuration file is composed of a &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt; tag, a &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt; to a sound sample file and zero or more &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; and/or &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;definitions.&lt;br /&gt;
&lt;br /&gt;
Paths are relative to [[$FG_ROOT]], but absolute paths may also be used.&lt;br /&gt;
&lt;br /&gt;
Comments are bracketed with &amp;lt;code&amp;gt;&amp;amp;lt;!-- --&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
This example would define an engine sound effect for a piston engine driven aeroplane.&lt;br /&gt;
&lt;br /&gt;
The sound effect representing the engine is located in &amp;lt;code&amp;gt;$FG_ROOT/Sounds&amp;lt;/code&amp;gt; and is named &amp;lt;code&amp;gt;wasp.wav&amp;lt;/code&amp;gt;. The effect is started when the property &amp;lt;code&amp;gt;/engines/engine/running&amp;lt;/code&amp;gt; becomes non-zero. &lt;br /&gt;
&lt;br /&gt;
When that happens, the sound will be played looped (see &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;) until the property returns zero again. As you can see the volume is dependent on the property &amp;lt;code&amp;gt;/engines/engine/mp-osi&amp;lt;/code&amp;gt;, and the pitch of the sound depends on the property &amp;lt;code&amp;gt;/engines/engine/rpm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;fx&amp;gt;&lt;br /&gt;
  &amp;lt;engine&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;engine&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;Sounds/wasp.wav&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;mode&amp;gt;looped&amp;lt;/mode&amp;gt;&lt;br /&gt;
   &amp;lt;condition&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/running&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/condition&amp;gt;&lt;br /&gt;
   &amp;lt;volume&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/mp-osi&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.005&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.15&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;0.5&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.15&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/volume&amp;gt;&lt;br /&gt;
   &amp;lt;pitch&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/rpm&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.0012&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.3&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;5.0&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.3&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/pitch&amp;gt;&lt;br /&gt;
  &amp;lt;/engine&amp;gt;&lt;br /&gt;
 &amp;lt;/fx&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inclusion from the aircraft-set.xml file ===&lt;br /&gt;
In order for the sound configuration to be used, it has to be included from the [[aircraft-set.xml]] file.&lt;br /&gt;
&lt;br /&gt;
This can be done by adding the path to the file relative to the aircraft's base path within the &amp;lt;code&amp;gt;&amp;amp;lt;sim&amp;amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft-set.xml file..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
   &amp;lt;sound&amp;gt;&lt;br /&gt;
    &amp;lt;path type=&amp;quot;string&amp;quot;&amp;gt;My-sound-config.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;/sound&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;/sim&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration tags ==&lt;br /&gt;
   &lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Named FX subtree living under /sim/sound&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt; ... &amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This is the event separator. The text inside the brackets can be anything, but it is advised to give it a meaningful name like: crank, engine, rumble, gear, squeal, flap, wind or stall.&lt;br /&gt;
 &lt;br /&gt;
: The value can be defined multiple times, thus anything which is related may have the same name (grouping them together).&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the name of the event. This name is used internally and, although it can me defined multiple times in the same file, should normally have an unique value.&lt;br /&gt;
 &lt;br /&gt;
: Multiple definitions of the same name will allow multiple sections to interfere in the starting and stopping of the sample.&lt;br /&gt;
&lt;br /&gt;
: This method can't be used to control the pitch or volume of the sample, but instead multiple volume or pitch section should be included inside the same event.&lt;br /&gt;
&lt;br /&gt;
: The types &amp;quot;raise&amp;quot; and &amp;quot;fall&amp;quot; will stop the playback of the sample regardless of any other event. This means that when the type &amp;quot;raise&amp;quot; is supplied, sample playback will stop when the event turns false. Using the type &amp;quot;fall&amp;quot; will stop playback when the event turns true.&lt;br /&gt;
&lt;br /&gt;
: IMPORTANT&lt;br /&gt;
:: If the trigger is used for anything else but stopping the sound at a certain event, all sections with the same name ''should'' have exactly the same sections for everything but property and type.&lt;br /&gt;
&lt;br /&gt;
:: In the case of just stopping the sample at a certain event, the sections for path, volume and pitch may be omitted.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defined the path to the sound file. The path is relative to the FlightGear root directory but could be specified absolute.&lt;br /&gt;
&lt;br /&gt;
: The sound format must be mono.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define a condition that triggers the event.&lt;br /&gt;
&lt;br /&gt;
: For a complete description of the FlightGear conditions, please read docs-mini/README.conditions or read the [[Conditions]] article on the wikie.&lt;br /&gt;
&lt;br /&gt;
: An event should define either a condition or a property.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define which property triggers the event, and refers to a node in the FlightGear property tree.&lt;br /&gt;
&lt;br /&gt;
: Action is taken when the property is non zero.&lt;br /&gt;
&lt;br /&gt;
: A more sophisticated mechanism to trigger the event is described in &amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines how the sample should be played:&lt;br /&gt;
 &lt;br /&gt;
:; once&lt;br /&gt;
:: The sample is played once. This is the default.&lt;br /&gt;
 &lt;br /&gt;
:; looped&lt;br /&gt;
:: The sample plays continuously, until the event turns false.&lt;br /&gt;
&lt;br /&gt;
:; in-transit&lt;br /&gt;
:: the sample plays continuously, while the property is changing its value.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the type of this sample, each type also have seperate volume slider in sound settings menu:&lt;br /&gt;
&lt;br /&gt;
:; fx&lt;br /&gt;
:: This is the default type and doesn't need to be defined.&lt;br /&gt;
&lt;br /&gt;
:; avionics&lt;br /&gt;
:: Sounds set to this type don't have a position and orientation but are treated as if it's mounted to the aircraft panel.&lt;br /&gt;
&lt;br /&gt;
:: It is up to the user to define if it can always be heard or only when in cockpit view.&lt;br /&gt;
&lt;br /&gt;
:; atc&lt;br /&gt;
:: Is used by the ATC chatter add-on.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;delay-sec&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Delay after which the sound starts playing.&lt;br /&gt;
&lt;br /&gt;
: This is useful to let a property start two sounds at the same time, where the second is delayed until the first stopped playing.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Volume or Pitch definition.&lt;br /&gt;
&lt;br /&gt;
: Currently there may be up to 5 volume and up to 5 pitch definitions defined within one sound event.&lt;br /&gt;
&lt;br /&gt;
: There are two important results from each &amp;lt;volume&amp;gt; and &amp;lt;pitch&amp;gt; section: the offset and the value. Normally all offset values from the different volume/pitch are added together to create the total offset.  The values from each &amp;lt;volume&amp;gt; or &amp;lt;pitch&amp;gt; section are multiplied together to create an final value.  Then the volume (or pitch, respectively) is set to total offset + final value.&lt;br /&gt;
&lt;br /&gt;
: A special condition occurs when the value of factor is negative, in which case the offset doesn't get added to the other offset values but instead will be used in the multiplication section.&lt;br /&gt;
&lt;br /&gt;
: Pitch final output can range from 0 to 2. 1 represents the original pitch of the sound file.  Offset defaults to 1, meaning that if no specific &amp;lt;pitch&amp;gt; parameters are given the file will be played at its original pitch.&lt;br /&gt;
&lt;br /&gt;
: Volume final output can range from 0 to 1. 1 represents full volume and 0 is silence.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines an expression, and will replace all other tags in this volume/pitch tag.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which property supplies the value for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: Either a &amp;lt;property&amp;gt; or an &amp;lt;internal&amp;gt; should be defined.  If none is defined, the property reverts to its default.  For volume this is 0, meaning the sound will not be audible at all.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;internal&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which internal variable should be used for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:: The following internals are available at this time:&lt;br /&gt;
&lt;br /&gt;
::; dt_play&lt;br /&gt;
::: The number of seconds since the sound started playing.&lt;br /&gt;
&lt;br /&gt;
::; dt_stop&lt;br /&gt;
::: The number of seconds after the sound has stopped.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the function that should be used upon the property before it is used for calculating the net result:&lt;br /&gt;
&lt;br /&gt;
::; lin&lt;br /&gt;
::: Linear handling of the property value. This is the default.&lt;br /&gt;
 &lt;br /&gt;
::; ln&lt;br /&gt;
:: Convert the property value to a natural logarithmic value before scaling it.&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
 &lt;br /&gt;
::; log&lt;br /&gt;
::: convert the property value to a true logarithmic value before scaling it. (log base 10)&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
&lt;br /&gt;
::; inv&lt;br /&gt;
::: Inverse linear handling (1/x).&lt;br /&gt;
&lt;br /&gt;
::; abs&lt;br /&gt;
:: Absolute handling of the value (always positive).&lt;br /&gt;
&lt;br /&gt;
::; sqrt&lt;br /&gt;
::: Calculate the square root of the absolute value before scaling it.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;factor&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the multiplication factor for the property value.&lt;br /&gt;
&lt;br /&gt;
:: A special condition is when scale is defined as a negative value. In this case the result of |&amp;lt;scale&amp;gt;| * &amp;lt;property) will be subtracted from &amp;amp;lt;default&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;offset&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: The initial value for this sound.&lt;br /&gt;
&lt;br /&gt;
:: This value is also used as an offset value for calculating the end result.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;random&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Add a bit of randomness to the offset. Only used for pitch.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;min&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Minimum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds start to sound funny. Anything lower will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;max&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Maximum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds gets to loud. Anything higher will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:: Keep in mind that min &amp;amp; max are applied first, then offset.  So for example if min = 0, max = 0.5 and offset = 1.0, then the resulting values will range 1 to 1.5.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;position&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the position of the sounds source relative to the 3D models center.&lt;br /&gt;
&lt;br /&gt;
: The coordinate system used is a left hand coordinate system where +Y = left, -Y = right, -Z = down, +Z = up, -X = forward, +X = aft.  Distances are in meters.&lt;br /&gt;
&lt;br /&gt;
: It's important to note that for sounds the Y axis is inverted compared to e.g. object animation coordinates (see also [[Howto:3D_Aircraft_Models]]).&lt;br /&gt;
&lt;br /&gt;
: The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!&lt;br /&gt;
&lt;br /&gt;
: Also take notice that the values should not be 0.0, since that can produce sound artifacts on some sound cards.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension offset (-X = forward, +X = aft, in meters)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension offset (+Y = left, -Y = right)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension offset (-Z = down, +Z = up)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;orientation&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the orientation of the sounds source.&lt;br /&gt;
&lt;br /&gt;
: The zero vector is default, indicating that a Source is not directional.&lt;br /&gt;
&lt;br /&gt;
: Specifying a non-zero vector will make the Source directional in the X,Y,Z direction&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;inner-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The inner edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound withing that angle will be played at the current gain.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The outer edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound beyond the outer cone will be played at &amp;quot;outer-gain&amp;quot; volume.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-gain&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The gain at the outer edge of the cone.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;reference-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set a reference distance of sound in meters. This is the distance where the volume is at its maximum. Default is 60.&lt;br /&gt;
&lt;br /&gt;
: Volume is clamped to this maximum for any distance below.&lt;br /&gt;
&lt;br /&gt;
: Volume is attenuated for any distance above.&lt;br /&gt;
&lt;br /&gt;
: Attenuation depends on reference and maximum distance. See OpenAL specification on &amp;quot;AL_INVERSE_DISTANCE_CLAMPED&amp;quot; mode for details on exact computation.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set the maximum audible distance for the sound in meters. Default is 6000.&lt;br /&gt;
&lt;br /&gt;
: Sound is cut-off above this distance.&lt;br /&gt;
&lt;br /&gt;
== Creating a configuration file ==&lt;br /&gt;
&lt;br /&gt;
To make things easy, there is a default value for most entries to allow a&lt;br /&gt;
sane configuration when a certain entry is omitted.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag !! Default value&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;type&amp;amp;gt;''' || lin&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;factor&amp;amp;gt;''' || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;offset&amp;amp;gt;''' || 0.0 for volume, 1.0 for pitch&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;min&amp;amp;gt;''' || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;max&amp;amp;gt;''' || 0.0 (don't check)&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Calculations are made the following way (for both pitch and volume):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
value = 0;&lt;br /&gt;
offs = 0;&lt;br /&gt;
&lt;br /&gt;
for (n = 0; n &amp;lt; max; n++) {&lt;br /&gt;
    if (factor &amp;lt; 0) {&lt;br /&gt;
        value += offset[n] - abs(factor[n]) * function(property[n]);&lt;br /&gt;
    } else {&lt;br /&gt;
        value *= factor[n] * function(property[n]);&lt;br /&gt;
        offs += offset[n];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
volume = offs + value;&lt;br /&gt;
if (volume &amp;gt; 1.0) vol = 1.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
where function can be one of: lin, ln, log, inv, abs or sqrt&lt;br /&gt;
&lt;br /&gt;
== Multiplayer sound ==&lt;br /&gt;
The multiplayer sound file works just as the normal sound file, except it should reside in &amp;lt;code&amp;gt;/sim/model/sound&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;/sim/sound&amp;lt;/code&amp;gt;. Make sure it depends on properties that are [[Howto:Transmit_properties_over_MP|transmitted over MP]].&lt;br /&gt;
&lt;br /&gt;
An example could be found in FGAddon 777-200: {{fgaddon aircraft url|777}}&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-set.xml&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; (this is not mandatory, just here to explain the inheritance. The -set.xml does/can include the model directly)&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; references &amp;lt;code&amp;gt;Aircraft/777/Models/777-200.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Models/777-200.xml&amp;lt;/code&amp;gt; has an &amp;lt;code&amp;gt;&amp;lt;sound&amp;gt;&amp;lt;path&amp;gt;Aircraft/777/Sounds/mp-sound.xml&amp;lt;/path&amp;gt;&amp;lt;/sound&amp;gt;&amp;lt;/code&amp;gt; reference&lt;br /&gt;
* &amp;lt;code&amp;gt;Sounds/mp-sound.xml&amp;lt;/code&amp;gt; contains an ordinary sound config file with relative property paths resolved to the relative &amp;lt;code&amp;gt;/ai/models/multiplayer/&amp;lt;/code&amp;gt; nodes of the multiplayer instance.&lt;br /&gt;
&lt;br /&gt;
== Recommended audio file formats ==&lt;br /&gt;
{{note|The sound sample '''must be in mono''' format.  This is because it can not be put in a 3D context otherwise. Also, as of at least June 2015 '''stereo samples will not be played'''.}}&lt;br /&gt;
&lt;br /&gt;
There some considerations on the quality to the audio files. As a rule of thumb, any computer is able to playback sounds in DVD-quality (48 kHz/24 bits).&lt;br /&gt;
Macs still has trouble reading 32 bit files. Most standard sound cards also can't playback 32 bit files.&lt;br /&gt;
&lt;br /&gt;
From a listeners point of view, anything above 44.1 kHz and 24 bits is only useful for high end music. Personally, I would think that 44.1 kHz with 16 bits should be more than enough to play engine sounds and alarms from the cockpit. Consider the disk-space against the gain in audio quality!&lt;br /&gt;
&lt;br /&gt;
== Preventing sounds from playing when sim starts ==&lt;br /&gt;
Some times it can be hard to prevent sounds from playing right away, if the condition starts to evaluate to true. A hack to get this to work is to multiply the volume with a property that you in nasal set to true some seconds after the sim has been initialized.&lt;br /&gt;
&lt;br /&gt;
== Bugs in the sound system ==&lt;br /&gt;
* The Doppler effect if you pass an aircraft in high speed sometimes is way too high pitch.&lt;br /&gt;
* None of the position coordinates must not be 0.0 as described above.&lt;br /&gt;
* Sounds using &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt; 'once' together with &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt; behave incorrectly when going out of range of the sound, then back in range, all while the trigger condition remains true:&lt;br /&gt;
** Until January 2023 (Flightgear 2020.3): the above causes the sound to incorrectly restart playing.&lt;br /&gt;
** Since January 2023 (for development versions): the sound stops entirely when going out of range, it is not possible to come back in range to hear the end of the sound.&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Conditions]]&lt;br /&gt;
* [[Expressions]]&lt;br /&gt;
* [[Howto:Reload sound configuration without restarting]]&lt;br /&gt;
&lt;br /&gt;
=== Readme file ===&lt;br /&gt;
* {{readme file|xmlsound}}&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.hxx}}&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.cxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.hxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.cxx}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139732</id>
		<title>Howto:Add sound effects to aircraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Add_sound_effects_to_aircraft&amp;diff=139732"/>
		<updated>2024-04-20T13:31:55Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Multiplayer sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can '''add sound effects to aircraft''' by adding the sound samples and configuring the sound effects in XML files.  The sound effects can be conditional and the sound's pitch and volume can depend on properties in the property tree.  &lt;br /&gt;
&lt;br /&gt;
{{note|This text is partially incorrect/outdated. Especially how the final volume/pitch is calculated. Make sure to also read the {{fgdata source|Docs/README.xmlsound|text=official documentation}}.}}&lt;br /&gt;
&lt;br /&gt;
Some sound effects are added other ways.  For example, sounds from avionics like navigation radio receivers are automatically added when you add those radios.&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!|2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/28505220/  | title  = &amp;lt;nowiki&amp;gt;Re: [Flightgear-devel] Stereo sounds no longer supported?&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;syd adams&amp;lt;/nowiki&amp;gt;  | date   = Dec 7th, 2011  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= The old way was that the stereo sound would always play the left channel on the left side.  Now you split the sound and place it in 3D space.  When you turn your head, the speaker the left side sound comes out of changes with you|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257291#p257291  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;bugman&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= All sounds must now be mono point sources, and stereo simply requires the two sound sources to be positioned in the 3D environment. |2= {{cite web  | url    = http://sourceforge.net/p/flightgear/mailman/message/34100151/  | title  = &amp;lt;nowiki&amp;gt;[Flightgear-devel] Audit and proposal for handling non-supported stereo sound files in FGAddon via the 3D sound engine.&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;Edward d'Auvergne&amp;lt;/nowiki&amp;gt;  | date   = May 10th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
{{FGCquote|1= We use OpenAL for 3D positional audio and most OpenAL implementations can only handle one stereo file.Also Stereo files will not work in 3d space, so they will not be positional.But  most aircraft developers did not know that and used several stereo files expecting everything to work properly but the truth was that in most implementations just one of those stereo files was played.And if you think of it, stereo separation does not work for boarding music either since it plays left channel to your left ear and right channel to your right ear. But in reality boarding music is played left channel to the left audio channel in the aircraft and right channel to the right audio channel in the aircraft.This works the same as normal stereo if you enter the aircraft, but will, reverse once you turn around.So the solution is to split up the stereo file into two mono files and play the proper channel at the proper side of the passenger compartment.|2= {{cite web  | url    = http://forum.flightgear.org/viewtopic.php?p=257289#p257289  | title  = &amp;lt;nowiki&amp;gt;Re: 787-8 Boarding music&amp;lt;/nowiki&amp;gt;  | author = &amp;lt;nowiki&amp;gt;erik&amp;lt;/nowiki&amp;gt;  | date   = Sep 14th, 2015  }}}}&lt;br /&gt;
&lt;br /&gt;
== Sound configuration files ==&lt;br /&gt;
The sound configuration files are [[PropertyList XML files]].&lt;br /&gt;
&lt;br /&gt;
The top level sound configuration file is composed of a &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt; tag, a &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt; to a sound sample file and zero or more &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; and/or &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;definitions.&lt;br /&gt;
&lt;br /&gt;
Paths are relative to [[$FG_ROOT]], but absolute paths may also be used.&lt;br /&gt;
&lt;br /&gt;
Comments are bracketed with &amp;lt;code&amp;gt;&amp;amp;lt;!-- --&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
This example would define an engine sound effect for a piston engine driven aeroplane.&lt;br /&gt;
&lt;br /&gt;
The sound effect representing the engine is located in &amp;lt;code&amp;gt;$FG_ROOT/Sounds&amp;lt;/code&amp;gt; and is named &amp;lt;code&amp;gt;wasp.wav&amp;lt;/code&amp;gt;. The effect is started when the property &amp;lt;code&amp;gt;/engines/engine/running&amp;lt;/code&amp;gt; becomes non-zero. &lt;br /&gt;
&lt;br /&gt;
When that happens, the sound will be played looped (see &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;) until the property returns zero again. As you can see the volume is dependent on the property &amp;lt;code&amp;gt;/engines/engine/mp-osi&amp;lt;/code&amp;gt;, and the pitch of the sound depends on the property &amp;lt;code&amp;gt;/engines/engine/rpm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;fx&amp;gt;&lt;br /&gt;
  &amp;lt;engine&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;engine&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;Sounds/wasp.wav&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;mode&amp;gt;looped&amp;lt;/mode&amp;gt;&lt;br /&gt;
   &amp;lt;condition&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/running&amp;lt;/property&amp;gt;&lt;br /&gt;
   &amp;lt;/condition&amp;gt;&lt;br /&gt;
   &amp;lt;volume&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/mp-osi&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.005&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.15&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;0.5&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.15&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/volume&amp;gt;&lt;br /&gt;
   &amp;lt;pitch&amp;gt;&lt;br /&gt;
    &amp;lt;property&amp;gt;/engines/engine/rpm&amp;lt;/property&amp;gt;&lt;br /&gt;
    &amp;lt;factor&amp;gt;0.0012&amp;lt;/factor&amp;gt;&lt;br /&gt;
    &amp;lt;min&amp;gt;0.3&amp;lt;/min&amp;gt;&lt;br /&gt;
    &amp;lt;max&amp;gt;5.0&amp;lt;/max&amp;gt;&lt;br /&gt;
    &amp;lt;offset&amp;gt;0.3&amp;lt;/offset&amp;gt;&lt;br /&gt;
   &amp;lt;/pitch&amp;gt;&lt;br /&gt;
  &amp;lt;/engine&amp;gt;&lt;br /&gt;
 &amp;lt;/fx&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inclusion from the aircraft-set.xml file ===&lt;br /&gt;
In order for the sound configuration to be used, it has to be included from the [[aircraft-set.xml]] file.&lt;br /&gt;
&lt;br /&gt;
This can be done by adding the path to the file relative to the aircraft's base path within the &amp;lt;code&amp;gt;&amp;amp;lt;sim&amp;amp;gt;&amp;lt;/code&amp;gt; tags in the aircraft-set.xml file..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;sim&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
   &amp;lt;sound&amp;gt;&lt;br /&gt;
    &amp;lt;path type=&amp;quot;string&amp;quot;&amp;gt;My-sound-config.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;/sound&amp;gt;&lt;br /&gt;
  &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
 &amp;lt;/sim&amp;gt;&lt;br /&gt;
 &amp;lt;!-- ... ---&amp;gt;&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration tags ==&lt;br /&gt;
   &lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;fx&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Named FX subtree living under /sim/sound&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt; ... &amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This is the event separator. The text inside the brackets can be anything, but it is advised to give it a meaningful name like: crank, engine, rumble, gear, squeal, flap, wind or stall.&lt;br /&gt;
 &lt;br /&gt;
: The value can be defined multiple times, thus anything which is related may have the same name (grouping them together).&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;name&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the name of the event. This name is used internally and, although it can me defined multiple times in the same file, should normally have an unique value.&lt;br /&gt;
 &lt;br /&gt;
: Multiple definitions of the same name will allow multiple sections to interfere in the starting and stopping of the sample.&lt;br /&gt;
&lt;br /&gt;
: This method can't be used to control the pitch or volume of the sample, but instead multiple volume or pitch section should be included inside the same event.&lt;br /&gt;
&lt;br /&gt;
: The types &amp;quot;raise&amp;quot; and &amp;quot;fall&amp;quot; will stop the playback of the sample regardless of any other event. This means that when the type &amp;quot;raise&amp;quot; is supplied, sample playback will stop when the event turns false. Using the type &amp;quot;fall&amp;quot; will stop playback when the event turns true.&lt;br /&gt;
&lt;br /&gt;
: IMPORTANT&lt;br /&gt;
:: If the trigger is used for anything else but stopping the sound at a certain event, all sections with the same name ''should'' have exactly the same sections for everything but property and type.&lt;br /&gt;
&lt;br /&gt;
:: In the case of just stopping the sample at a certain event, the sections for path, volume and pitch may be omitted.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;path&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defined the path to the sound file. The path is relative to the FlightGear root directory but could be specified absolute.&lt;br /&gt;
&lt;br /&gt;
: The sound format must be mono.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define a condition that triggers the event.&lt;br /&gt;
&lt;br /&gt;
: For a complete description of the FlightGear conditions, please read docs-mini/README.conditions or read the [[Conditions]] article on the wikie.&lt;br /&gt;
&lt;br /&gt;
: An event should define either a condition or a property.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Define which property triggers the event, and refers to a node in the FlightGear property tree.&lt;br /&gt;
&lt;br /&gt;
: Action is taken when the property is non zero.&lt;br /&gt;
&lt;br /&gt;
: A more sophisticated mechanism to trigger the event is described in &amp;lt;condition&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines how the sample should be played:&lt;br /&gt;
 &lt;br /&gt;
:; once&lt;br /&gt;
:: The sample is played once. This is the default.&lt;br /&gt;
 &lt;br /&gt;
:; looped&lt;br /&gt;
:: The sample plays continuously, until the event turns false.&lt;br /&gt;
&lt;br /&gt;
:; in-transit&lt;br /&gt;
:: the sample plays continuously, while the property is changing its value.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: This defines the type of this sample, each type also have seperate volume slider in sound settings menu:&lt;br /&gt;
&lt;br /&gt;
:; fx&lt;br /&gt;
:: This is the default type and doesn't need to be defined.&lt;br /&gt;
&lt;br /&gt;
:; avionics&lt;br /&gt;
:: Sounds set to this type don't have a position and orientation but are treated as if it's mounted to the aircraft panel.&lt;br /&gt;
&lt;br /&gt;
:: It is up to the user to define if it can always be heard or only when in cockpit view.&lt;br /&gt;
&lt;br /&gt;
:; atc&lt;br /&gt;
:: Is used by the ATC chatter add-on.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;delay-sec&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Delay after which the sound starts playing.&lt;br /&gt;
&lt;br /&gt;
: This is useful to let a property start two sounds at the same time, where the second is delayed until the first stopped playing.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;volume&amp;amp;gt;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;&amp;amp;lt;pitch&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Volume or Pitch definition.&lt;br /&gt;
&lt;br /&gt;
: Currently there may be up to 5 volume and up to 5 pitch definitions defined within one sound event.&lt;br /&gt;
&lt;br /&gt;
: There are two important results from each &amp;lt;volume&amp;gt; and &amp;lt;pitch&amp;gt; section: the offset and the value. Normally all offset values from the different volume/pitch are added together to create the total offset.  The values from each &amp;lt;volume&amp;gt; or &amp;lt;pitch&amp;gt; section are multiplied together to create an final value.  Then the volume (or pitch, respectively) is set to total offset + final value.&lt;br /&gt;
&lt;br /&gt;
: A special condition occurs when the value of factor is negative, in which case the offset doesn't get added to the other offset values but instead will be used in the multiplication section.&lt;br /&gt;
&lt;br /&gt;
: Pitch final output can range from 0 to 2. 1 represents the original pitch of the sound file.  Offset defaults to 1, meaning that if no specific &amp;lt;pitch&amp;gt; parameters are given the file will be played at its original pitch.&lt;br /&gt;
&lt;br /&gt;
: Volume final output can range from 0 to 1. 1 represents full volume and 0 is silence.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines an expression, and will replace all other tags in this volume/pitch tag.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;property&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which property supplies the value for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: Either a &amp;lt;property&amp;gt; or an &amp;lt;internal&amp;gt; should be defined.  If none is defined, the property reverts to its default.  For volume this is 0, meaning the sound will not be audible at all.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;internal&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines which internal variable should be used for the calculation.&lt;br /&gt;
&lt;br /&gt;
:: The value is treated as a floating point number.&lt;br /&gt;
&lt;br /&gt;
:: The following internals are available at this time:&lt;br /&gt;
&lt;br /&gt;
::; dt_play&lt;br /&gt;
::: The number of seconds since the sound started playing.&lt;br /&gt;
&lt;br /&gt;
::; dt_stop&lt;br /&gt;
::: The number of seconds after the sound has stopped.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;type&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the function that should be used upon the property before it is used for calculating the net result:&lt;br /&gt;
&lt;br /&gt;
::; lin&lt;br /&gt;
::: Linear handling of the property value. This is the default.&lt;br /&gt;
 &lt;br /&gt;
::; ln&lt;br /&gt;
:: Convert the property value to a natural logarithmic value before scaling it.&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
 &lt;br /&gt;
::; log&lt;br /&gt;
::: convert the property value to a true logarithmic value before scaling it. (log base 10)&lt;br /&gt;
&lt;br /&gt;
::: Anything below 1 will return zero.&lt;br /&gt;
&lt;br /&gt;
::; inv&lt;br /&gt;
::: Inverse linear handling (1/x).&lt;br /&gt;
&lt;br /&gt;
::; abs&lt;br /&gt;
:: Absolute handling of the value (always positive).&lt;br /&gt;
&lt;br /&gt;
::; sqrt&lt;br /&gt;
::: Calculate the square root of the absolute value before scaling it.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;factor&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Defines the multiplication factor for the property value.&lt;br /&gt;
&lt;br /&gt;
:: A special condition is when scale is defined as a negative value. In this case the result of |&amp;lt;scale&amp;gt;| * &amp;lt;property) will be subtracted from &amp;amp;lt;default&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;offset&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: The initial value for this sound.&lt;br /&gt;
&lt;br /&gt;
:: This value is also used as an offset value for calculating the end result.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;random&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Add a bit of randomness to the offset. Only used for pitch.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;min&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Minimum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds start to sound funny. Anything lower will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:; &amp;lt;code&amp;gt;&amp;amp;lt;max&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:: Maximum allowed value.&lt;br /&gt;
&lt;br /&gt;
:: This is useful if sounds gets to loud. Anything higher will be truncated to this value.&lt;br /&gt;
&lt;br /&gt;
:: Keep in mind that min &amp;amp; max are applied first, then offset.  So for example if min = 0, max = 0.5 and offset = 1.0, then the resulting values will range 1 to 1.5.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;position&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the position of the sounds source relative to the 3D models center.&lt;br /&gt;
&lt;br /&gt;
: The coordinate system used is a left hand coordinate system where +Y = left, -Y = right, -Z = down, +Z = up, -X = forward, +X = aft.  Distances are in meters.&lt;br /&gt;
&lt;br /&gt;
: It's important to note that for sounds the Y axis is inverted compared to e.g. object animation coordinates (see also [[Howto:3D_Aircraft_Models]]).&lt;br /&gt;
&lt;br /&gt;
: The volume calculation due to distance and orientation of the sounds source ONLY work on mono samples!&lt;br /&gt;
&lt;br /&gt;
: Also take notice that the values should not be 0.0, since that can produce sound artifacts on some sound cards.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension offset (-X = forward, +X = aft, in meters)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension offset (+Y = left, -Y = right)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension offset (-Z = down, +Z = up)&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;orientation&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Specify the orientation of the sounds source.&lt;br /&gt;
&lt;br /&gt;
: The zero vector is default, indicating that a Source is not directional.&lt;br /&gt;
&lt;br /&gt;
: Specifying a non-zero vector will make the Source directional in the X,Y,Z direction&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;x&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: X dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Y dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;z&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Z dimension&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;inner-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The inner edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound withing that angle will be played at the current gain.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-angle&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The outer edge of the audio cone in degrees (0.0 - 360.0).&lt;br /&gt;
&lt;br /&gt;
: Any sound beyond the outer cone will be played at &amp;quot;outer-gain&amp;quot; volume.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;outer-gain&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: The gain at the outer edge of the cone.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;reference-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set a reference distance of sound in meters. This is the distance where the volume is at its maximum. Default is 60.&lt;br /&gt;
&lt;br /&gt;
: Volume is clamped to this maximum for any distance below.&lt;br /&gt;
&lt;br /&gt;
: Volume is attenuated for any distance above.&lt;br /&gt;
&lt;br /&gt;
: Attenuation depends on reference and maximum distance. See OpenAL specification on &amp;quot;AL_INVERSE_DISTANCE_CLAMPED&amp;quot; mode for details on exact computation.&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: Set the maximum audible distance for the sound in meters. Default is 6000.&lt;br /&gt;
&lt;br /&gt;
: Sound is cut-off above this distance.&lt;br /&gt;
&lt;br /&gt;
== Creating a configuration file ==&lt;br /&gt;
&lt;br /&gt;
To make things easy, there is a default value for most entries to allow a&lt;br /&gt;
sane configuration when a certain entry is omitted.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag !! Default value&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;type&amp;amp;gt;''' || lin&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;factor&amp;amp;gt;''' || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;offset&amp;amp;gt;''' || 0.0 for volume, 1.0 for pitch&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;min&amp;amp;gt;''' || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| '''&amp;amp;lt;max&amp;amp;gt;''' || 0.0 (don't check)&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Calculations are made the following way (for both pitch and volume):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
value = 0;&lt;br /&gt;
offs = 0;&lt;br /&gt;
&lt;br /&gt;
for (n = 0; n &amp;lt; max; n++) {&lt;br /&gt;
    if (factor &amp;lt; 0) {&lt;br /&gt;
        value += offset[n] - abs(factor[n]) * function(property[n]);&lt;br /&gt;
    } else {&lt;br /&gt;
        value *= factor[n] * function(property[n]);&lt;br /&gt;
        offs += offset[n];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
volume = offs + value;&lt;br /&gt;
if (volume &amp;gt; 1.0) vol = 1.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
where function can be one of: lin, ln, log, inv, abs or sqrt&lt;br /&gt;
&lt;br /&gt;
== Multiplayer sound ==&lt;br /&gt;
The multiplayer sound file works just as the normal sound file, except it should reside in &amp;lt;code&amp;gt;/sim/model/sound&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;/sim/sound&amp;lt;/code&amp;gt;. Make sure it depends on properties that are [[Howto:Transmit_properties_over_MP|transmitted over MP]].&lt;br /&gt;
&lt;br /&gt;
An example could be found in FGAddon 777-200: {{fgaddon aircraft url|777}}&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-set.xml&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; (this is not mandatory, just here to explain the inheritance. The -set.xml does/can include the model directly)&lt;br /&gt;
* &amp;lt;code&amp;gt;777-200-common.xml&amp;lt;/code&amp;gt; references &amp;lt;code&amp;gt;Aircraft/777/Models/777-200.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Models/777-200.xml&amp;lt;/code&amp;gt; has an &amp;lt;code&amp;gt;&amp;lt;sound&amp;gt;&amp;lt;path&amp;gt;Aircraft/777/Sounds/mp-sound.xml&amp;lt;/path&amp;gt;&amp;lt;/sound&amp;gt;&amp;lt;/code&amp;gt; reference&lt;br /&gt;
* &amp;lt;code&amp;gt;Sounds/mp-sound.xml&amp;lt;/code&amp;gt; contains an ordinary sound config file with relative property paths resolved to the relative &amp;lt;code&amp;gt;/ai/multiplayer&amp;lt;/code&amp;gt; nodes of the multiplayer instance.&lt;br /&gt;
&lt;br /&gt;
== Recommended audio file formats ==&lt;br /&gt;
{{note|The sound sample '''must be in mono''' format.  This is because it can not be put in a 3D context otherwise. Also, as of at least June 2015 '''stereo samples will not be played'''.}}&lt;br /&gt;
&lt;br /&gt;
There some considerations on the quality to the audio files. As a rule of thumb, any computer is able to playback sounds in DVD-quality (48 kHz/24 bits).&lt;br /&gt;
Macs still has trouble reading 32 bit files. Most standard sound cards also can't playback 32 bit files.&lt;br /&gt;
&lt;br /&gt;
From a listeners point of view, anything above 44.1 kHz and 24 bits is only useful for high end music. Personally, I would think that 44.1 kHz with 16 bits should be more than enough to play engine sounds and alarms from the cockpit. Consider the disk-space against the gain in audio quality!&lt;br /&gt;
&lt;br /&gt;
== Preventing sounds from playing when sim starts ==&lt;br /&gt;
Some times it can be hard to prevent sounds from playing right away, if the condition starts to evaluate to true. A hack to get this to work is to multiply the volume with a property that you in nasal set to true some seconds after the sim has been initialized.&lt;br /&gt;
&lt;br /&gt;
== Bugs in the sound system ==&lt;br /&gt;
* The Doppler effect if you pass an aircraft in high speed sometimes is way too high pitch.&lt;br /&gt;
* None of the position coordinates must not be 0.0 as described above.&lt;br /&gt;
* Sounds using &amp;lt;code&amp;gt;&amp;amp;lt;mode&amp;amp;gt;&amp;lt;/code&amp;gt; 'once' together with &amp;lt;code&amp;gt;&amp;amp;lt;max-dist&amp;amp;gt;&amp;lt;/code&amp;gt; behave incorrectly when going out of range of the sound, then back in range, all while the trigger condition remains true:&lt;br /&gt;
** Until January 2023 (Flightgear 2020.3): the above causes the sound to incorrectly restart playing.&lt;br /&gt;
** Since January 2023 (for development versions): the sound stops entirely when going out of range, it is not possible to come back in range to hear the end of the sound.&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Conditions]]&lt;br /&gt;
* [[Expressions]]&lt;br /&gt;
* [[Howto:Reload sound configuration without restarting]]&lt;br /&gt;
&lt;br /&gt;
=== Readme file ===&lt;br /&gt;
* {{readme file|xmlsound}}&lt;br /&gt;
&lt;br /&gt;
=== Source code ===&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.hxx}}&lt;br /&gt;
* {{simgear file|simgear/sound/xmlsound.cxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.hxx}}&lt;br /&gt;
* {{flightgear file|src/Sound/fg_fx.cxx}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Julia_photoscenery_generator&amp;diff=139668</id>
		<title>Julia photoscenery generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Julia_photoscenery_generator&amp;diff=139668"/>
		<updated>2024-04-13T07:52:35Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* --help or -h */ update and reformat code block&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = G91R1B taking off from LOWI .jpg|128px&lt;br /&gt;
|developedby         = Adriano Bassignana&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Photoscenery generator&lt;br /&gt;
|latestrelease       = (rolling releases)&lt;br /&gt;
|initialrelease      = 18.04.2021&lt;br /&gt;
|writtenin           = julia&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v2&lt;br /&gt;
|website             = https://github.com/abassign/Photoscenary&lt;br /&gt;
}}&lt;br /&gt;
[[File:G91R1B taking off from LOWI .jpg|thumb|500px|Photoscenery created with the Julia photoscenery generator behind a [[FIAT G91R1B|G91R1B]] taking off from LOWI. In this example the resolution of the tiles is 32K (s 6).]]&lt;br /&gt;
&lt;br /&gt;
Through the '''Julia photoscenery generator''' using ImageMagic and written in the Julia programming language you can create photoscenery tiles.&lt;br /&gt;
&lt;br /&gt;
Once you have everything installed you will discover how easy it is to fill your disk with hundreds of GB made from thousands of images of our planet and then fly over vast territories and recognize our cities and villages.&lt;br /&gt;
&lt;br /&gt;
The use of World Scenery by FlightGear together with the photoscenery as a background can make the scene very rich in details and pleasing to your eyes.&lt;br /&gt;
== Quick method for Windows users ==&lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. [https://julialang.org/downloads/#official_binaries_for_manual_download Down-Inst Julia Programming Language].&lt;br /&gt;
* 2. [https://imagemagick.org/script/download.php#windows Down-Inst ImageMagick].&lt;br /&gt;
* 3. [https://github.com/abassign/Photoscenary/archive/refs/heads/main.zip Down-Inst photoscenary.jl.zip] Easy Manual installation. Unzip Fhotoscenary-main folder, place it where you preferred. Look inside for the file photoscenary.jl and make it executable by Julia, using Right click &amp;gt;&amp;gt; Properties &amp;gt;&amp;gt; Navigate to the bin folder Julia.exe and choose open with Julia Programming Language.&lt;br /&gt;
===Check===&lt;br /&gt;
* 4. Open FGlauncher &amp;gt;&amp;gt; Settings &amp;gt;&amp;gt; Additional settings. Add the property: --telnet=5000&lt;br /&gt;
* 5. Make sure you have terrasync activated. Automatic download terrain in FGlauncher.&lt;br /&gt;
* 6. In FlightGear v2020.3.18 check the following: Start the simulator (one flight) and access the menu: VIEW/RENDERING OPTIONS. In the right column, make sure you have the &amp;quot;SATELLITE PHOTOSCENERY&amp;quot; option activated and close the flight.&lt;br /&gt;
===Run &amp;amp; Check===&lt;br /&gt;
* 7. Run the program photoscenary.jl. It will run and check with Julia, will prompt telnet connection attempts at 127.0.0.1:5000.&lt;br /&gt;
* 8. Run FG. Fly and check visually that you are getting textures. Give it a time, you'll get better textures progressively during your flight. &lt;br /&gt;
* 9. Check in C:\Users\YOUR_USER_NAME\FlightGear\Downloads\TerraSync\Orthophotos. You should see folders of type &amp;quot;e000n00&amp;quot; containing &amp;quot;.dds&amp;quot; files.&lt;br /&gt;
* 10. Check that the Julia's window running photoscenary.jl is getting data (tiles).  &lt;br /&gt;
&lt;br /&gt;
In case of doubts, the next video at SUMU Montevideo area by Manuel Aceña is recommended as a reference.&lt;br /&gt;
=== Video  ===&lt;br /&gt;
{{#ev:youtube|PbYAvxmAkIc}}&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The success that photoscenery is achieving among FlightGear users has prompted me to study a program for downloading and installing photoscenery via a simple command to run inside a terminal (if we are in Linux or Mac OS) or in a command prompt (if we are in Windows).&lt;br /&gt;
&lt;br /&gt;
The program was developed in Julia which is a latest generation programming language developed by MIT. This language looks quite similar to Nasal and therefore the code is easily readable by those who already use the FlightGear Nasal language script, but it is extremely faster and full of features that make the creation of this program quick and easy enough to evolve. Obviously the only inconvenience is that Julia has to be installed on your system, but it is a very simple action and equivalent to the same need to install ImageMagick on your system, this latter program allows the conversion of images in DDS format.&lt;br /&gt;
[[File:Julia photoscenery generator - Towards Budapest on the Danube plain.jpg|thumb|500x500px|The photoscenary allows to have very realistic effects on rather complex territories, such as crops in the plains. The image shows the signs of the passage of old rivers, still visible as a difference in the color of the vegetation.]]&lt;br /&gt;
&lt;br /&gt;
==Installing the programs==&lt;br /&gt;
&lt;br /&gt;
=== FlightGear ===&lt;br /&gt;
Currently to utilise photoscenery the minimum FlightGear version is 2020.3.18&lt;br /&gt;
&lt;br /&gt;
===Julia installation===&lt;br /&gt;
https://julialang.org/&lt;br /&gt;
&lt;br /&gt;
Julia installation is straightforward, whether using precompiled binaries or compiling from source. Download and install Julia by following the instructions at https://julialang.org/downloads/. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Windows&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (installer), 64-bit (portable)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |32-bit (installer), 32-bit (portable)&lt;br /&gt;
|-&lt;br /&gt;
!macOS&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on x86&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (GPG), 64-bit (musl) (GPG)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | 32-bit (GPG)&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on ARM&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (AArch64) (GPG)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |32-bit (ARMv7-a hard float) (GPG)&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on PowerPC&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |64-bit (little endian) (GPG)&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Generic FreeBSD on x86&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | 64-bit (GPG)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
For Linux users there are no particular problems, each distribution has Julia among the installable programs. The only problem is the version that may be older than 1.6, in this case I recommend wasting a little more time and updating the installation to 1.6, you can follow [https://medium.com/coffee-in-a-klein-bottle/install-julia-1-5-on-ubuntu-bb8be4b2571d this handy guide]  that explains how to do everything in a few minutes.&lt;br /&gt;
&lt;br /&gt;
The version to use is convenient that it is from '''1.6''' onwards, 1.5.4 is present in the Ubuntu repositories until 2020.10 but it is better to update it to 1.6 even if this requires a little work, But with Ubuntu/Kubuntu version 2021.4 Julia is already at version 1.6.1 and so just use the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''sudo apt install julia'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Julia is a young language that is continuously updated and the difference between Julia 1.5 and 1.6 is really very big for the application startup speed. For the execution there are no particular differences if you use Julia 1.5.4 onwards.&lt;br /&gt;
&lt;br /&gt;
The installation with windows is absolutely the easiest to do, just follow the installer to get a version of Julia 1.6.x All users who have done the installation have never complained of problems.&lt;br /&gt;
&lt;br /&gt;
For '''Mac users''' it might be the slightly more complicated thing, but from the users texts made, I haven't had any issues encountered among Mac users.&lt;br /&gt;
&lt;br /&gt;
For '''Windows users''' have not encountered any particular problems with the installation, which is always the most up-to-date.&lt;br /&gt;
&lt;br /&gt;
{{caution&lt;br /&gt;
|The program was designed to work in Linux (any distribution), Windows 10 and Mac OS. This is very unlikely to work with CygWin as there have been reports of problems calling Imagemagick. Instead, it works with Windows Subsystem for Linux, which is basically a well-integrated emulator of Linux inside the Windows system. In this case, multithreading may not work well, so I recommend running the program with only one Julia thread via the command:&amp;lt;BR&amp;gt;&amp;lt;i&amp;gt;julia -t 1 photoscenary.jl ...&amp;lt;/i&amp;gt;&amp;lt;BR&amp;gt;Or with the command:&amp;lt;BR&amp;gt;&amp;lt;i&amp;gt;julia photoscenary.jl&amp;lt;/i&amp;gt;&amp;lt;BR&amp;gt;But this approach seems like an unnecessary complication to me as the program works perfectly in Windows 10.&lt;br /&gt;
| width   =&lt;br /&gt;
| padding =&lt;br /&gt;
| margin  = 2%&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===ImageMagick installation===&lt;br /&gt;
https://imagemagick.org/index.php&lt;br /&gt;
&lt;br /&gt;
For download program this is the link: https://imagemagick.org/script/download.php&lt;br /&gt;
&lt;br /&gt;
Normally the files that are released by satellite image servers are in PNG format, but the PNG files are absolutely unsuitable to be used as photoscenery files. The reason is that the graphics engine of FlightGear must still convert these files into DDS format which is more compressed than the PNG format (about 4 times). Conversion, for very large files, takes a lot of CPU time, slowing down the execution of FlightGear. Therefore for this program it has been chosen to release only the DDS format and therefore ImageMagick is the most suitable program for this operation.&lt;br /&gt;
&lt;br /&gt;
ImageMagick allows you to convert files transparently to the user very quickly.&lt;br /&gt;
&lt;br /&gt;
In Linux distributions, ImageMagick is often already present, to find out just type the command &amp;lt;code&amp;gt;'''convert --version'''&amp;lt;/code&amp;gt; and see if something responds. In windows it must be downloaded with an installer that can be downloaded here: https://imagemagick.org/script/download.php#windows&lt;br /&gt;
&lt;br /&gt;
The installation in Windows of ImageMagick could give problems if it has not been correctly carried out. Therefore, if the photoscenary.jl program returns an error due to the lack of ImageMagick (the program always checks at the start) it is convenient to remove ImageMagick through the Windows program management and install it again.&lt;br /&gt;
&lt;br /&gt;
===The photoscenary.jl installation===&lt;br /&gt;
https://github.com/abassign/Photoscenary&lt;br /&gt;
&lt;br /&gt;
The program is written in pure Julia code, there are no scripts that can complicate your life. However, some rules must be followed that simplify all the work.&lt;br /&gt;
&lt;br /&gt;
First create a directory where to place the program and its support files. The directory can be placed wherever you want as the program will dynamically build its references. Once the directory (or folder for Mac users) is done, download the Zip file that GitHub generates obtained from this link: https://github.com/abassign/Photoscenary.git&lt;br /&gt;
&lt;br /&gt;
[[File:Github for photoscenary.jl.png|alt=|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Click on code and it will download the zip file that you can open and insert the contents into the folder you created. In the folder you will find some auxiliary files, but now let's analyze the program files.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;'''photoscenary.jl'''&amp;lt;/code&amp;gt;  It is the Julia program to run, you can open it and see it with a simple text editor, I think some of you who have programmed in Python or NASAL will have no difficulty understanding how it works. However the program is compiled every time you run it, it is this compilation, really efficient and fast, that allows you to obtain an excellent executive performance.&lt;br /&gt;
*&amp;lt;code&amp;gt;'''params.xml'''&amp;lt;/code&amp;gt;  It is an XML file that contains some parameters necessary for the correct execution of the program.&lt;br /&gt;
*&amp;lt;code&amp;gt;'''airports.csv'''&amp;lt;/code&amp;gt;  It is the file, extracted from the correspondent of FlightGear, which contains a list of airports, their coordinates and the extended name. This file is essential in order to use a location option for the area to be downloaded.&lt;br /&gt;
&lt;br /&gt;
==Execution of the program ==&lt;br /&gt;
&lt;br /&gt;
===Hello World!===&lt;br /&gt;
There is a minimal execution that allows you to check if everything we have done has worked correctly, this is a sort of ''Hello World'' of the program.&lt;br /&gt;
&lt;br /&gt;
The most important thing is to go to the directory (folder) where you installed the program with a ''terminal'' or with a ''command prompt'' (if you are in Windows).&lt;br /&gt;
&lt;br /&gt;
So the first thing to do is to be with the terminal inside this directory and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia photoscenary.jl'''&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An area of 2048 pixels (long side) tiles with a size of approximately 10x10 NM is generated, with the coordinates of the ''Orio al Serio Airport'' (LIME) in the center. Not having entered any other parameters, the processing time is relatively long as only one download per tile is performed. &lt;br /&gt;
&lt;br /&gt;
[[File:Test julia photoscenary.jl.png|frameless|800x800px]] &lt;br /&gt;
&lt;br /&gt;
We carefully observe this execution, the first line shows the name of the program, the version and the date of realization, then follows the indication that the prerequisite test will take place. If we are at the first execution we will see an endless series of compilations that can make us think that something has not gone well, but do not worry, it is simply the module management system that downloads the modules useful for the execution of the program and that are not present in the base system. In this way the Julia program updates the necessary components without having to prompt the user to do it for him. &lt;br /&gt;
&lt;br /&gt;
In this particular case, which occurs only the first time or in a version change, the application communicates that it will terminate the execution and invites the user, once back to the command prompt, to run the same command again, also in this case there could be a lot of updating of the modules that have not been updated in the first cycle, do not worry, everything is going great. At the end of the update, finally, the execution of the code contained in the program takes place.&lt;br /&gt;
&lt;br /&gt;
The image above summarizes what happened during the download of the tiles.&lt;br /&gt;
&lt;br /&gt;
Very important to note the line:&lt;br /&gt;
&lt;br /&gt;
'''ImageMagick is operational!'''&lt;br /&gt;
&lt;br /&gt;
This line tells us that the system has done a test with ImageMagick installed on its system and has verified that it works correctly. If this does not work, since without ImageMagick the system cannot do anything, you have an exit with a program error (Error code 504).&lt;br /&gt;
&lt;br /&gt;
====Description of the individual status lines of the processes performed====&lt;br /&gt;
We now summarize the content of the individual lines that indicate the modules downloaded and their status:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Column!!Content&lt;br /&gt;
|-&lt;br /&gt;
!Time:&lt;br /&gt;
|Processing time for individual tiles&lt;br /&gt;
|-&lt;br /&gt;
!elab:&lt;br /&gt;
|Total processing time&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
( ... {{!}} ... ) &amp;lt;!-- This must be on a separate line for the table to render it properly, even though {{!}} helps break it less. --&amp;gt;&lt;br /&gt;
|The processing time for each tile followed by the estimated time.&lt;br /&gt;
These two values allow us to understand the efficiency of the work in progress.&lt;br /&gt;
|-&lt;br /&gt;
!Tiles:&lt;br /&gt;
|Number of tiles that have been processed by the program.&lt;br /&gt;
|-&lt;br /&gt;
! on&lt;br /&gt;
|Total number of tiles to be processed.&lt;br /&gt;
|-&lt;br /&gt;
!res&lt;br /&gt;
|The residual tiles to be processed.&lt;br /&gt;
|-&lt;br /&gt;
!Th:&lt;br /&gt;
|Number of threads used by the process.&lt;br /&gt;
|-&lt;br /&gt;
!path:&lt;br /&gt;
| The path and name of the processed file.&lt;br /&gt;
|-&lt;br /&gt;
!MB/s:&lt;br /&gt;
|Download speed in Mega Bytes on second.&lt;br /&gt;
|-&lt;br /&gt;
!MB dw:&lt;br /&gt;
|Amount of mega bytes downloaded overall.&lt;br /&gt;
|-&lt;br /&gt;
!( ... )&lt;br /&gt;
| Type of activity carried out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Activate the Julia multi thread ===&lt;br /&gt;
Julia is a language created for applications on supercomputers, artificial intelligence, number-crusher, etc.&lt;br /&gt;
&lt;br /&gt;
These are applications that require systems with a lot of CPUs and therefore the compiler has the ability to activate very sophisticated strategies to better manage resources.&lt;br /&gt;
&lt;br /&gt;
The photoscenary.jl program performs many processes in parallel in order to optimize the download and conversion of images. The conversion from the original PNG format to the more efficient format for FlightGear DDS requires a rather heavy application (ImageMagick) which can only be run on single CPUs. For this it is very efficient to run the program on multiple CPUs, but it is necessary to use some care that I explain below.&lt;br /&gt;
&lt;br /&gt;
==== Core &amp;lt;-&amp;gt; CPU what are they ? ====&lt;br /&gt;
Any PC has a processor with a certain number of ''physical'' ''core'' ranging from 2 (Intel i3) to values that can go up to 12 or more for more performing desktop processors.&lt;br /&gt;
&lt;br /&gt;
For years, all processor cores have been able to handle two separate CPU, using a hardware trick. Therefore an i3 processor with two core will allow to manage up to 4 CPU (or separate processes) at the same time.&lt;br /&gt;
&lt;br /&gt;
At this point it is important the role of the operating system that must manage the available CPU and assign them to the running programs.&lt;br /&gt;
&lt;br /&gt;
So when you start Julia it is possible to reserve the number of CPU to the application will require than and this must be done at the beginning so that the compiler will configure the code properly.&lt;br /&gt;
&lt;br /&gt;
This is achieved with the '''-t n''' command where n is a number equal to or less than the number of available CPU.&lt;br /&gt;
&lt;br /&gt;
==== The Julia -t n option ====&lt;br /&gt;
If you run the program with the command:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Only one CPU will be used and this can be a bottleneck when downloading files from the web server that distributes the images, since, especially if you have images composed of a single file (from the smallest ones up to 2048 pixels) the program uses only one process (for larger images the program uses many more download processes).&lt;br /&gt;
&lt;br /&gt;
So let's say we have a machine with 6 core and therefore 12 CPU we can launch the program with this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we are on a 4 CPU as i3 it is necessary to reduce the value to 4, but maybe 3 would also be good, so we can write the command like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 3 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Be careful though ====&lt;br /&gt;
''If the value of the maximum number of CPU is too high, the behavior of the operating system could be such as to reduce the advantage in execution or even slow down the program!''&lt;br /&gt;
&lt;br /&gt;
This certainly happens when the value of the '''''-t''' numbe''r is higher than the number of CPUs and if the system is windows 10 or 8 you will have an incredible slowdown of the program! Therefore on a Windows machine it is not advisable to always enter a value less than or equal to the number of CPU of the processor in use (''number of cores multiplied by 2'').&lt;br /&gt;
&lt;br /&gt;
For Linux and Mac systems the problem seems to be less evident and so you can try to increase the number beyond the theoretical maximum value.&lt;br /&gt;
&lt;br /&gt;
=== Now let's try to delete all the files just inserted===&lt;br /&gt;
This test allows us to understand the use of a very useful parameter to manage the files we create with this application, for example if we want to delete the files, perhaps to have an area managed with the traditional FlightGear system, we can do it with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl --over 9'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will get this result (I show only the last lines to focus attention on the fact that the system declares to perform some removes)&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia photoscenary.jl --over 9.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
===Now lets put the turbojet into the download program===&lt;br /&gt;
We now put the &amp;lt;code&amp;gt;'''-t 10'''&amp;lt;/code&amp;gt; option on the Julia compiler start command. This option allows you to run multiple threads at the same time allowing you to speed up the download of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In this image I show all the lines processed to show how the progression of the download speed increase. As you can see at first the speed seems low, but in reality the system has launched about ten threads that form a queue of requests to the image server. The format of the images, when nothing is declared, as in this example, is 2048 pixels on the long side, and the size of the DDS file (we are at an intermediate latitude between 62-22 degrees) is 1 MB.&lt;br /&gt;
&lt;br /&gt;
The average speed is 1.7 MB/s (but can go even higher) and is determined by the actual workload on the server distributing the images.&lt;br /&gt;
&lt;br /&gt;
This way we have more than tripled the download speed.&lt;br /&gt;
&lt;br /&gt;
Obviously these values ​​can change a lot, but they are on average better than those obtained with single downloads. Not only that, but multithreading also works with the ImageMagick program that performs the transformation of the PNG file into DDS, this transformation is not fast, but in this way it is parallelized, making this phase less expensive in terms of time.&lt;br /&gt;
&lt;br /&gt;
This feature is even more interesting for larger format images.&lt;br /&gt;
&lt;br /&gt;
===Increase the resolution of the images, radius and --over option===&lt;br /&gt;
Let's see these two new options that can be given to the program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-r 5'''&amp;lt;/code&amp;gt; where n is the number of miles of radius, if &amp;lt;code&amp;gt;'''-r'''&amp;lt;/code&amp;gt; (Radius) is equal to 5 it means that we are covering a square whose diagonal is 5 NM. Note that if -r is not defined the system considers the radius of 10 NM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; indicates the resolution of the images we want to obtain, if this option is not inserted the default value is 2 equal to an image, on the long side, of 2048 pixels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;j'''ulia -t 10 photoscenary.jl -r 5 -s 4'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 5 -s 4 (skip).png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In fact the system has not done anything, the status message, at the bottom of each line, tells us (skip) which means that the program has seen that an image is already present and this image cannot be overwritten as it is an image valid (actually the program checks the image by loading and verifying it), if the image was not valid, it would delete it and replace it with a new one.&lt;br /&gt;
&lt;br /&gt;
But it is still possible to override by inserting the &amp;lt;code&amp;gt;'''--over 1'''&amp;lt;/code&amp;gt; option at this point this interesting fact happens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 4 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 5 -s 4 --over 1.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
This download is '''16 times slower''' as the precedent download (Without the &amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt; option the image downloads as &amp;lt;code&amp;gt;-s 2&amp;lt;/code&amp;gt; which corresponds to 2048 pixels long edge) &amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; option downloads images of '''8192''' pixels long side. In fact the system downloads 16 images with size of '''2048''' and composes them into a matrix '''4x4,''' at the end of the composition the images are first transformed into an temporary PNG image format which will be processed by ImageMagick and becomes an DDS format image that is compatible with FlightGear without any on-the-fly conversion (which is done for PNG images). Therefore this line shows us the downloading of the single images that make up the matrix in order to give an idea that something is happening.&lt;br /&gt;
&lt;br /&gt;
[[File:Julia -t 10 photoscenary.jl -r 5 -s 4 --over 1-BW.png|alt=|frameless|799x799px]]&lt;br /&gt;
&lt;br /&gt;
Note that the download speed of individual images has increased (in this case 2.98 MB/s) as the system has opened several dozen download threads (96 download tasks are open at the same time as their number is the product of 6 threads x 16 images) .&lt;br /&gt;
&lt;br /&gt;
It is important to understand this aspect of the program which can easily bring the network into saturation. In this example 3 MB/s correspond to about 30-40 MBit/s which is about 70-80% of the bandwidth that the network allows me to have. For this, if the band used is high, in order to keep a good surfing speed on the network, it is sufficient to reduce the value of the threads in Julia from -t 10 to -t 4 or -t 5.&amp;lt;blockquote&amp;gt;'''Note''': ''Julia is a programming language that has an incredible variety of methods for exploiting all possible hardware solutions. What I exploit in this program is only a small part, Julia even allows you to distribute the processing on remote machines, perhaps placed on different networks, in order to distribute the workload through the use of a few instructions.''&amp;lt;/blockquote&amp;gt;From a series of tests that I have done, 8K images are the most interesting for systems that have at least 16 GB of RAM, if the RAM is lower these images can lead to FlightGear in memory overflow and therefore its closure by the system operating.&lt;br /&gt;
&lt;br /&gt;
==== The -s parameter ====&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s'''&amp;lt;/code&amp;gt; defines 7 possible resolutions for images:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter!!Side px!! Format!!Size MB!! Comment&lt;br /&gt;
!PC RAM GB&lt;br /&gt;
|-&lt;br /&gt;
!-s 0&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|512&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|0.064&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
!-s 1&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|1024&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|0.256&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
!'''-s 2'''&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2048&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|1&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4&lt;br /&gt;
|-&lt;br /&gt;
!-s 3&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4096&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4&lt;br /&gt;
|2 x 2 matrix = 4 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|8&lt;br /&gt;
|-&lt;br /&gt;
!'''-s 4'''&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|8192&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|4 x 4 matrix = 16 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|-&lt;br /&gt;
!-s 5&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16384&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|64&lt;br /&gt;
|8 x 8 matrix = 64 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|-&lt;br /&gt;
!-s 6&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|32768&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|256&lt;br /&gt;
|8 x 8 matrix = 64 images with 4096 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|}&lt;br /&gt;
The PC RAM that I recommend for PCs that need to download images. So I was able to download, even with Windows 10, which is much heavier than Linux, 16384 px images with only 4 GB of RAM! In this case there is a huge increase in virtual memory (''Both Linux with kernel 5 and Windows 10 have a dynamic virtual memory that is quite efficient if the hard disk is of the SSD type'') in use which, due to the structure of the program and the particular compiler used, it does not seem to slow down performance.&lt;br /&gt;
&lt;br /&gt;
==== The --sdwn parameter====&lt;br /&gt;
&amp;lt;code&amp;gt;'''--sdwn'''&amp;lt;/code&amp;gt; It is a parameter that defines how to change the value of the resolution or the distance using a linear method. For example, if the coverage radius is 100 nm and -s 5 (16K pixels), if we set &amp;lt;code&amp;gt;'''--sdwn 2'''&amp;lt;/code&amp;gt; we will have this resolution trend:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Dist. (nm)&lt;br /&gt;
!0&lt;br /&gt;
!10&lt;br /&gt;
!20&lt;br /&gt;
! 30&lt;br /&gt;
!40&lt;br /&gt;
! 50&lt;br /&gt;
!60&lt;br /&gt;
!70&lt;br /&gt;
!80&lt;br /&gt;
!90&lt;br /&gt;
!100&lt;br /&gt;
|-&lt;br /&gt;
!Res. (0..6)&lt;br /&gt;
|5&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
As can be seen from the table, the resolution in pixels of the images varies with the distance from the center (radius).&lt;br /&gt;
&lt;br /&gt;
With this method it is possible to obtain very large coverage without occupying too much memory and greatly reducing download times. Certainly the quality of the farther images is lower, but the problem could be not very perceptible as normally an airplane when it takes off is low on the ground and therefore the pilot wishes to have a high resolution (images with many pixels), but then rises in altitude and the resolution of the terrain is acceptable although much lower. With this method it is possible to cover large areas of land in a very short time, shorter than the flight necessary to cross that territory.&lt;br /&gt;
&lt;br /&gt;
====The --over parameter====&lt;br /&gt;
A second important fact is the &amp;lt;code&amp;gt;'''--over 1'''&amp;lt;/code&amp;gt; parameter which tells the system it can overwrite, the &amp;lt;code&amp;gt;'''--over'''&amp;lt;/code&amp;gt; option &amp;lt;code&amp;gt;'''1'''&amp;lt;/code&amp;gt; indicates that overwriting can only occur if the new file is larger than the file it replaces.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to build limited areas with higher resolution, for example airport areas, or particularly beautiful areas that we want to enhance.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;'''--over'''&amp;lt;/code&amp;gt; option has the following recognized parameters:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter!!Overwriting/deletion&lt;br /&gt;
|-&lt;br /&gt;
!--over 0&lt;br /&gt;
|Default option that inhibits any overwriting of images.&lt;br /&gt;
|-&lt;br /&gt;
!--over 1&lt;br /&gt;
|Overwrite only if the image to be replaced is larger than the present one&lt;br /&gt;
if the previous image is not present, the image will be inserted anyway.&lt;br /&gt;
|-&lt;br /&gt;
!--over 2&lt;br /&gt;
|Always overwrites, for example if you want to reduce the size of the images by a certain area.&lt;br /&gt;
|-&lt;br /&gt;
!--over 9&lt;br /&gt;
|Deletes the images present in the defined area.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Let's go to Fiumicino (Rome in Italy) by -i option===&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -s 4 -i fiumicino'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 125012.png|alt=|frameless|799x799px]]&lt;br /&gt;
&lt;br /&gt;
We are already familiar with these options&lt;br /&gt;
&lt;br /&gt;
The absence of '''&amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt;''' indicates that the image extraction radius is the default of 10 nm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; indicates a resolution of 8192 pixels long side&lt;br /&gt;
&lt;br /&gt;
But this is new&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-i fiumicino'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It means that we are selecting an airport containing the word '''fiumicino''&amp;lt;nowiki/&amp;gt;'. The search takes place in a database, with an Open Data license, which reports over 60,000 airports that have ICAO code.&lt;br /&gt;
&lt;br /&gt;
The database is distributed together with the ''photoscenary.jl'' program with the ''airports.csv'' file, which is easily editable, via a text editor. The ''airports.csv'' file is not actually the database used by the program, but only the data source which is automatically converted into the more practical ''airports.jdb'' file which is the database file used by the JuliaDB package.&lt;br /&gt;
&lt;br /&gt;
If you want to edit ''airports.csv'', once the file is saved, you will notice that the next time you run the ''photoscenary.jl'' program it will take a few seconds until a new ''airports.jdb'' is generated.&lt;br /&gt;
&lt;br /&gt;
The text inserted after the '''&amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;''' parameter can contain a single word or a sentence, but in this case it must be delimited by double quotes.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i &amp;quot;leonardo da vinci&amp;quot;&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Once the program has started, the system will respond by entering also with this output:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 213622.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
For example, if you enter as a name&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i rome&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The program will respond with the first 30 airports that correspond to the presence of the word Rome in one of the three search fields, as shown in this figure.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 215037-2.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In this case, just enter a unique selector, such as the ICAO ID, to obtain the searched airport, as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i LIRF&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Therefore, the search using the -i option can be extremely convenient, as it allows you to quickly have the coordinates of any airport present in the ICAO database.&lt;br /&gt;
&lt;br /&gt;
The search word can also be partial as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i zuric&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 220731.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
Any accented letters are normalized to the unaccented Latin form, for example:&lt;br /&gt;
&lt;br /&gt;
''Zürich Airport'' becomes ''Zurich Airport''&lt;br /&gt;
&lt;br /&gt;
and therefore the search can be successful if you write:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i &amp;quot;zurich airport&amp;quot;&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
=== Dynamically download orthographic images by --connect ===&lt;br /&gt;
It is very convenient to download the orthographic images of the territory actually flown over by the plane.&lt;br /&gt;
&lt;br /&gt;
In this case, the system will use the aircraft's course as reference, interspersed with points of radius -r.&lt;br /&gt;
&lt;br /&gt;
The program will then download only the images actually needed, thus minimizing the amount of data to download.&lt;br /&gt;
&lt;br /&gt;
The parameter to activate this function is this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--connect &amp;quot;&amp;lt;IP address&amp;gt;:&amp;lt;port&amp;gt;&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the program finds this parameter, checks if the syntax of the address is correct and listens showing a line that has as, first character and an arrow that rotates 45 degrees every second, followed by the sentence that begins with the text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''Try the frist connection to Flightgear with address: ...'''&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This delay can last for an indefinite time, until Flightgear is activated with, obviously, the Telnet connection port activated, as explained above.&lt;br /&gt;
&lt;br /&gt;
When Flightgear is activated, the program realizes it and starts evaluating the geographic position of the aircraft and then, if necessary, downloading and positioning the DDS images in the photorealistic scenario.&lt;br /&gt;
&lt;br /&gt;
If you close Flightgear again, the program will be put on hold again, a situation indicated by the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''Try connect to Flightgear with address: ...'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To exit the program it is necessary to type the key sequence: [CTRL] + [C]&lt;br /&gt;
&lt;br /&gt;
Exiting the program will have no effect on the downloaded DDS files as the program operates through transactional methods.&lt;br /&gt;
&lt;br /&gt;
==== A simple example ====&lt;br /&gt;
For example, you can run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the program will download the images in a radius of 10 nm for the entire length of the route. Thus forming a corridor of images that can give the illusion of a much larger territorial coverage than reality.&lt;br /&gt;
&lt;br /&gt;
The images, if the &amp;lt;code&amp;gt;-s n&amp;lt;/code&amp;gt; parameter is not specified, will have the size of 2048 px, this is a good enough size for flights above 10,000 ft. &lt;br /&gt;
&lt;br /&gt;
If the speed of the plane is not too high and the internet line is good, it may happen that the pilot can get a flight with complete coverage of the orthographic images, giving the illusion of having downloaded very large geographical areas and more a narrow corridor that follows the route followed by the plane ..&lt;br /&gt;
&lt;br /&gt;
If, on the other hand, the speed of the plane is high, or the speed of downloading the images is not high, it may be necessary, from time to time, to activate the option to update the scenario using the command:&lt;br /&gt;
&lt;br /&gt;
''[menu] -&amp;gt; [debug] -&amp;gt; [Reload Scenery]''&lt;br /&gt;
&lt;br /&gt;
In this case the simulator will freeze for a few seconds and then a scenario will be observed with orthographic images of the territory overflown.&lt;br /&gt;
&lt;br /&gt;
==== Preparation of Flightgear to allow you to communicate with the photoscenary.jl program ====&lt;br /&gt;
[[File:Julia photoscenery generator - launcher QT configuration - 20210618 232448.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
First you need to run Flightgear with the option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--telnet=5000'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command will activate the telnet server on Flightgear with port 5000 active. The port can be changed, but the important thing is that it is then the communication port entered in the &amp;lt;code&amp;gt;--connect&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
In the example in Additional Settings we see that the first line is the telnet server activation command, server needed to communicate with the photoscenary.jl program.&lt;br /&gt;
&lt;br /&gt;
In additional settings I have inserted two other options that may be useful:&lt;br /&gt;
&lt;br /&gt;
The parameter ''--httpd = 5001'' which activates an HTTP server, visible through the browser, useful for displaying the route on a geographic map. The third option instead activates multithreading which, eg run PC with at least 2 cores, allows you to render the flight more fluid.&lt;br /&gt;
&lt;br /&gt;
==== Performing dynamic loading of orthographic images during flight ====&lt;br /&gt;
First you need to start Flightgear (and with it the telnet server we configured previously), wait for its loading phase to finish. And then start the program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Julia photoscenery generator - execution connect param - 20210618.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Unlike the other methods of selecting the areas to be filled with images, this method can show an intermediate step called &amp;quot;System pending ...&amp;quot; which allows you to communicate to the pilot that the program is running smoothly, but has already downloaded all the images needed for the current flyover area and then waits to reach the next area from which it will start downloading images again.&lt;br /&gt;
&lt;br /&gt;
==== However, the other options are also allowed ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 3 --over 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;--connect&amp;lt;/code&amp;gt; command does not prevent the use of other options, such as image resolution and enabling overwriting if the new image is of a higher resolution than the one already present. &lt;br /&gt;
&lt;br /&gt;
===Follow a route generated with route manager by --route===&lt;br /&gt;
The FlightGear ''route manager'' program allows you to generate a route that passes through various points and/or airports, the route can be saved to a file that is placed in the Export folder of the FlightGear $FG Home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211312.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
In this example, a route has been generated made up of 6 points, of which the first and last are respectively the departure airport and the arrival airport.&lt;br /&gt;
&lt;br /&gt;
The route can be saved in a file which, in the example, has the name with a name ''LOWI-LIME.xml''&lt;br /&gt;
&lt;br /&gt;
The file is saved in the ''Export'' directory of the FGFS HOME directory.&lt;br /&gt;
&lt;br /&gt;
Being an XML file it is possible to open it through any text editor, and possibly also modify it, an operation, by the way, quite simple.&lt;br /&gt;
&lt;br /&gt;
Here's what the xml file used for our example looks like:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211351.png|frameless|929x929px]]&lt;br /&gt;
&lt;br /&gt;
The file can be as long as you like, however at the end it defines a path like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211204.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
Now that it has been clarified what a route is and how it is saved, let's see how it can be exploited to cover the photoscenary only for the parts near the route.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --route LOWI-LIME.xml -s 2 -r 10 --over 1 -d 0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
In this example, the saved route is taken over by the program that searches for it. This little magic is used to simplify the program execution command as it is assumed that the file is of XML type and contains specific tags. If these tags are not present, the file will be considered invalid. If, on the other hand, if the file is validated, then it becomes the basis for extracting the path.&lt;br /&gt;
&lt;br /&gt;
Once the file is validated, the program is executed, but first the project showing the single execution steps is shown.&lt;br /&gt;
&lt;br /&gt;
The step is indicated with its step number and a decimal representing the sub-step. Therefore a step that has zero decimal indicates that that step has been inserted in the route manager, while the others are steps built by the algorithm to give continuity to the coverage of the tiles.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210524 004027.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
It is noted that at the end of the project (part in red in the screen shown here) the download phase begins for each single step, which, in this example, are 21.&lt;br /&gt;
&lt;br /&gt;
Obviously the execution of the program can take a relatively long time, but certainly much less if that area had been covered with a single large set of tiles.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''that instead of entering the file name together with the path, only the file name can be entered, for example LIME-LIMJ.gpx somewhere, as long as it is inside the homepage or a subfolder. The program has an automatic search function which will find the file and use it as a route.''&lt;br /&gt;
&lt;br /&gt;
==== Skyvector format ====&lt;br /&gt;
Since version 0.3.9 the automatic conversion of files produced with [https://skyvector.com/ Skyvector] has been defined. The file in .gpx format is automatically converted to produce the equivalent route to the file produced by the FGFS route manager when supplied via the &amp;lt;code&amp;gt;--route&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
Skyvector is a very comprehensive route generator that is often used to plan routes in civil aviation. The use of this tool allows you to create route files in gpx format that can be read by the FGFS route manager and by this program. The conversion is transparent, that is, it is the program that parses the XML and determines its real format.&lt;br /&gt;
&lt;br /&gt;
===Let's go via the geographic coordinates by -o -a &amp;lt;code&amp;gt;'''--latll --lonll --latur --lonur option'''&amp;lt;/code&amp;gt;===&lt;br /&gt;
The coordinates are made explicit from the first line of the image:&lt;br /&gt;
&lt;br /&gt;
central point ''lat: 21.317454 lon: -157.91603'' radius: ''5.0''&lt;br /&gt;
&lt;br /&gt;
Not only that, but the second line reminds us in which area we are operating, that is an ideal rectangle with coordinates defined as follows:&lt;br /&gt;
&lt;br /&gt;
Lower left corner&lt;br /&gt;
&lt;br /&gt;
''latLL: 21,200 lonLL: -158,100''&lt;br /&gt;
&lt;br /&gt;
Upper right corner&lt;br /&gt;
&lt;br /&gt;
''latUR: 21.500 lonUR: -157.800''&lt;br /&gt;
&lt;br /&gt;
But we could have had the same result with the following parameters that explicitly define the center point:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 3 -a 21.317454 -o ''-''157.91603'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or with the parameters that define the lower left corner and the upper right corner&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -s 3 --latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.8'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entering the position values explicitly is a very convenient way when you do not know the acronym or name of an airport or want to select a particular area via google maps for example.&lt;br /&gt;
&lt;br /&gt;
{{tip|Google maps allows you to give the coordinates in the degrees and fractions of degrees format, used by this program and FlightGear, by simply clicking the right mouse button on the map. Alternatively use the FlightGear [https://scenery.flightgear.org/static/map/index.html scene models map], which has coordinates in decimal format and tile information.}}&lt;br /&gt;
&lt;br /&gt;
===The sea can be a problem --attemps option===&lt;br /&gt;
Now let's enlarge the radius area with &amp;lt;code&amp;gt;'''-r 20'''&amp;lt;/code&amp;gt; (20 NM) with lower resolution tiles, we use in this example &amp;lt;code&amp;gt;'''-s 2'''&amp;lt;/code&amp;gt; (2048 pixels long side)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl --attemps 0'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point we look at the output which points out a few things&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl top.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Meanwhile, let's see the effect of the &amp;lt;code&amp;gt;'''--over 0'''&amp;lt;/code&amp;gt; parameter which prevents smaller images from overwriting images already present, but let's also observe another fact:&lt;br /&gt;
&lt;br /&gt;
''The '''err''': column no longer reports the value 0 but numerical values ​​that go up 7..10 and then beyond. This means that some tiles have not been uploaded, not only that, but there is also a very high reduction in the download speed that reaches, barely 0.16 MB/sec.''&lt;br /&gt;
&lt;br /&gt;
The reason for this behavior is that around Honolulu there is the Pacific Ocean, or the sea, and the image server I am using does not show the sea beyond a certain distance from the coast. This means that the program tries to download a certain tile, but it returns an error, unfortunately not immediately, but only after a few seconds, the error starts a recovery procedure that performs the download attempt for two more times, if the third attempt fails, the system places the tiles, not downloaded, in a special list that can be retried in a subsequent cycle.&lt;br /&gt;
&lt;br /&gt;
Here is what we will have at the end of the download batch:&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl bottom.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Now let's see the incomplete file list that shows the tiles that have not been downloaded, the attempts parameter, in the ''Incomplete file list'', indicates the number of attempts made. By stating that the number of attempts is zero, it means that the program lists only the files that have resulted not downloaded and then exits the program. But if you enter a numeric value for the --attempt parameter instead, you can reprocess the tiles that have not been downloaded, but it is possible to change the number of attempts using the parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--attempts n'''&amp;lt;/code&amp;gt; (''default is '''2''''')&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;'''n'''&amp;lt;/code&amp;gt; is any integer. Do not increase this value too much, and only do it if the internet connection line is unstable or if the image server often drops the connection.&lt;br /&gt;
&lt;br /&gt;
Attempts to reconnect are quite slow, especially if the images are small, so it is better not to overdo it to avoid unnecessarily lengthening the download times.&lt;br /&gt;
&lt;br /&gt;
===Try to recover the errors --attemps n===&lt;br /&gt;
Often the errors are due to the presence of marine areas that are covered by maps with lower resolution, so the only way to obtain an error recovery is to lower the resolution.&lt;br /&gt;
&lt;br /&gt;
For this an algorithm has been inserted that in the first recovery step uses a width of '''1024''', width which is reduced to '''512,256,128''' etc ... for the following steps whose max number is defined by the value &amp;lt;code&amp;gt;'''--attempts n'''&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Let's try this download, always with the airport of Honolulu adding the possibility of making 3 attempts:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -s 2 -i Honolulu --attemps 3&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
[[File:Julia -t 10 photoscenary.jl -r 10 -s 2 -i Honolulu --attemps 3.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
At the end of the execution it is observed that 6 tiles have been inserted in the incomplete list, therefore it is possible, if the value of &amp;lt;code&amp;gt;'''--attemps'''&amp;lt;/code&amp;gt; is greater than 0 (''by default I remember that it is '''2'''''), to obtain a re-execution only for the tiles in error with a resolution request starting from 1024 pixels down.&lt;br /&gt;
&lt;br /&gt;
With the default value '''&amp;lt;code&amp;gt;--attemps 2&amp;lt;/code&amp;gt;''' it is hereby possible to arrive at tiles of 512 pixels which always seem to be released by the server, with --attempts 3 it is also possible to try tiles of 256 pixels the server does not yet release 512 pixels.&lt;br /&gt;
&lt;br /&gt;
The end result is complete coverage of the entire area. In two resolution groups, that of 2028 pixels proposed with '''&amp;lt;code&amp;gt;--s 2&amp;lt;/code&amp;gt;''' and that of 1024 pixels used by the recovery function.&lt;br /&gt;
&lt;br /&gt;
==Other options==&lt;br /&gt;
The program allows the use of other options that may be useful in certain circumstances, below I give a list with the relative possibilities of use.&lt;br /&gt;
&lt;br /&gt;
===--map '''''n'''''===&lt;br /&gt;
You can change the standard image server. Each image server is identified with a unique id which currently selects the following addresses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+List of servers currently active and inserted in the params.xml file&lt;br /&gt;
!Id&lt;br /&gt;
!Name&lt;br /&gt;
!Comment&lt;br /&gt;
! Address of the organization&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
|ESRI GIS&lt;br /&gt;
|Default, this servers is for all over the world&lt;br /&gt;
|[https://www.esri.com/en-us/about/about-esri/overview https://www.esri.com]&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
|USGS&lt;br /&gt;
|United States only. Public domain license, only US&lt;br /&gt;
|https://basemap.nationalmap.gov&lt;br /&gt;
|-&lt;br /&gt;
|'''3'''&lt;br /&gt;
|PNOA&lt;br /&gt;
| PNOA only Spain&lt;br /&gt;
|https://www.ign.es&lt;br /&gt;
|-&lt;br /&gt;
|'''4'''&lt;br /&gt;
|Geoportal&lt;br /&gt;
|geoportal.gov.pl only Poland&lt;br /&gt;
|https://www.geoportal.gov.pl&lt;br /&gt;
|}&lt;br /&gt;
[[File:Screenshot_20210524_205813.png|alt=|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
This option allows you to select a specific server different from the standard one (Id = 1). All servers are inserted into the ''params.xml'' file in the following form:&lt;br /&gt;
&lt;br /&gt;
Additional servers can be added simply by adding a new &amp;lt;server&amp;gt; ... &amp;lt;/server&amp;gt; entry within the general &amp;lt;servers&amp;gt; ... &amp;lt;/servers&amp;gt; entry. The Id must be unique, as it is the selector and can take any value. If someone adds their own server they can do it, but I recommend starting from a higher Id, for example 100, so as not to interfere with the Ids that could be added in the future.&lt;br /&gt;
&lt;br /&gt;
''An important recommendation '''is to replace''', in URLs, any &amp;quot;'''&amp;amp;'''&amp;quot; character with &amp;quot;'''|'''&amp;quot; (Pipe or vertical bar)''&lt;br /&gt;
&lt;br /&gt;
For example the URL:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;&amp;lt;url-command&amp;gt;SERVICE=WMS&amp;amp;VERSION=1.1.1&amp;amp;REQUEST=GetMap&amp;amp;LAYERS=OI ...&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
It should be written in the form:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;&amp;lt;url-command&amp;gt;SERVICE=WMS|VERSION=1.1.1|REQUEST=GetMap|LAYERS=OI ...&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
This is the characteristic output that occurs during program execution and shows the image server in use&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210524 205939.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
The selected server highlighted by the red line and shows the main data that allow it to be identified.&lt;br /&gt;
&lt;br /&gt;
Be very careful to use the right server for a certain area, the program does not know if the selected server is valid or not for a certain area, so a wrong server could delete the previously inserted image files.&lt;br /&gt;
&lt;br /&gt;
If you are unsure, check the server site or do a test limited to a certain area. The servers, when they are out of the area, do not give errors, but they release a completely white image, so always be very careful.&lt;br /&gt;
&lt;br /&gt;
===--path or -p ===&lt;br /&gt;
The program normally downloads image files in DDS or PNG format directly to the directory:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;''&amp;lt;home&amp;gt;''/fgfs-scenery/photoscenery/Orthophotos&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
However, sometimes a user wants to use a different destination, perhaps even a different mass storage unit, such as a NAS or a disk connected via USB, in these cases this option becomes very convenient.&lt;br /&gt;
&lt;br /&gt;
There are two ways to define a path:&lt;br /&gt;
&lt;br /&gt;
'''Path relative to the home directory ''('''''&amp;lt;nowiki/&amp;gt;''in the example the user is /home/abassign''')'''''&amp;lt;nowiki/&amp;gt;''':'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl -i pantelleria -r 20 -s 3 --attemps 2 -p scenary-dir&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The system will respond:&lt;br /&gt;
&lt;br /&gt;
The images path is: '''/home/abassign/scenary-dir/Orthophotos'''&lt;br /&gt;
&lt;br /&gt;
'''Absolute path:'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl -i pantelleria -r 20 -s 3 --attemps 2 -p /home/abassign/scenary-dir&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The path, in the case of using Windows, can be written in the Windows notation, for example:&lt;br /&gt;
&lt;br /&gt;
''c:\users\abassign\scenary-dir'' &lt;br /&gt;
&lt;br /&gt;
or in Linux:&lt;br /&gt;
&lt;br /&gt;
/home/abassign/scenary-dir&lt;br /&gt;
&lt;br /&gt;
==== Automatic path if the program is connected to FGFS ====&lt;br /&gt;
Since version 0.3.8 a method has been introduced that extracts the path directly from the FGFS program if it is connected (use the '''--connect''' param for the connection). The method is therefore implicit if the program is connected and the path is not defined, the path used will be the one described in the property tree of FGFS ''/sim/fg-scenery''. Obviously, if in the command line there is the --path parameter, the path reported by this has a higher priority.&lt;br /&gt;
&lt;br /&gt;
=== --save ===&lt;br /&gt;
The program '''always saves''' the images (''from version 0.3.8'') to a directory that can be implicit or explicitly defined with the '''--save &amp;quot;a path&amp;quot;''' parameter.&lt;br /&gt;
&lt;br /&gt;
There are therefore two cases:&lt;br /&gt;
&lt;br /&gt;
# If the '''--save''' parameter has a valid path, the program will save the images to be deleted on that path.&lt;br /&gt;
# If the save parameter is not present, the path is determined automatically by reading the path of insertion of the downloaded files by adding the sub-name '''''&amp;lt;path&amp;gt;-saved''''' to the path so as not to allow FGFS to use it as an operational directory.&lt;br /&gt;
&lt;br /&gt;
If you do not want to save the replaced images, you must explicitly enter the parameter '''--nosave''' as explained in the next paragraph.&lt;br /&gt;
&lt;br /&gt;
The path is always absolute, as it must be possible to manage external drives in which you want to insert the files to be saved.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to use an external disk, perhaps of a mechanical type of 1-4 TB, to save the files that have been downloaded by the program, all divided by size in pixels, as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;--save /media/abassign/save_2018/Salvataggi&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
You will get a configuration similar to this:&lt;br /&gt;
&lt;br /&gt;
[[File:Photoscenary julia save option example 01.png|frameless|740x740px]]&lt;br /&gt;
&lt;br /&gt;
As you can see, the images are grouped by size in pixels (s 0 &amp;lt;-&amp;gt; 512 ... s 4 &amp;lt;-&amp;gt; 8196 ... etc) and therefore the program, depending on the size of the image to be inserted, can choose the most appropriate image.&lt;br /&gt;
&lt;br /&gt;
It is interesting to try this configuration with -s 3 (4096 pix) which will load all the images from 4096 into the scenario directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you later want to have smaller images, for example le s 2 (2048 pix) or le s 1 from 1024 px just type this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 1 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''--over 2''' option is used to allow the replacement of larger images with smaller ones, as explained in the appropriate paragraph.&lt;br /&gt;
&lt;br /&gt;
The reorganization time of the images is very fast and is linked to the moving time of the images present in the system.&lt;br /&gt;
&lt;br /&gt;
Note that if the 4096 pix images were not saved yet, before replacing with the smaller images, they will be saved in the path indicated by --save.&lt;br /&gt;
&lt;br /&gt;
==== Summing up ====&lt;br /&gt;
With the --save option you can save the images that will be replaced when loading new images with different resolution. With this technique it is possible to save large areas of images on an external disk and finally, with this technique it is possible to change the resolution of the images without ever losing the downloaded images.&lt;br /&gt;
&lt;br /&gt;
=== --nosave ===&lt;br /&gt;
If we want to inhibit the autosave mode, just enter the '''--nosave''' parameter in the command line. With this parameter, saving of images that are deleted from the path is blocked.&lt;br /&gt;
&lt;br /&gt;
=== --png ===&lt;br /&gt;
It is a switch that allows you to download images in PNG format without switching to DDS images. This feature makes the downloaded images much larger (4 times) and easily viewable or editable by an image editing program such as GIMP or Imagemagick.&lt;br /&gt;
&lt;br /&gt;
If you subsequently start the program without the --png option, the program will try, before downloading the images from some external server, to check if the PNG images present are compatible with the DDS to be generated, if they are you will have the rapid conversion live PNG images in DDS.&lt;br /&gt;
&lt;br /&gt;
If the --save option has been activated, the PNG images will not be lost, but saved in the chosen path.&lt;br /&gt;
&lt;br /&gt;
=== --tile===&lt;br /&gt;
The world of Flightgear is represented with a tessellation of rectangles according to a rule defined at this link:&lt;br /&gt;
&lt;br /&gt;
https://wiki.flightgear.org/Tile_Index_Scheme&lt;br /&gt;
&lt;br /&gt;
The tile defines the minimum loadable area for a photo scenery, its size varies with latitude. Here is an example of how the tiles are distributed on the globe taken from a FGUK movie:{{#ev:youtube|YxWV4wk_dHw}}All the images that make up the photoscenery have a unique numerical name that is calculated through a special algorithm according to the latitude and longitude of the tile. This number is defined as the tile identifier.&lt;br /&gt;
&lt;br /&gt;
You can view the tile number in the FlightGear [https://scenery.flightgear.org/static/map/index.html scene models map] (lower left corner).&lt;br /&gt;
&lt;br /&gt;
For example if you run the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 1 --tile 3105266'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You point to a tile that belongs to the LIME airport area and is approximately equivalent to this command:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 5 -s 1 -l lime&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
In this way it is possible to select any area without having to enter particular coordinates, but only through this number.&lt;br /&gt;
&lt;br /&gt;
===--sexagesimal or -x===&lt;br /&gt;
The angular parameters '''--lon --lat --lonll --latll --lonur --latur''' are normally expressed as hexadecimal. But it often happens that you have the coordinates in ''sexagesimal'' degrees. If the option is inserted, the system converts the decimal part from ''sexagesimal'' to ''centesimal''. For example, if you enter the value of '''52.21''' ''sexagesimal'' degrees, the program will convert them to '''52° 21' N''' which will then be converted to '''52.35''' degree.&lt;br /&gt;
&lt;br /&gt;
'''Note''': ''It is not necessary to use the seconds as the tolerance of the tiles is 1/8 of a degree equal to about 7 minutes.''&lt;br /&gt;
&lt;br /&gt;
For example is possible to write:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -x -a 52.21 -o 13.30&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
which is equivalent to writing&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -x -a 52.35 -o 13.50&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
If the ''sexagesimal'' degrees are south or east, a minus sign must be entered, the field does not recognize the symbols N, S, E, W typically used in this type of notation.&lt;br /&gt;
&lt;br /&gt;
===--proxy===&lt;br /&gt;
Which allows you to connect with a proxy server, the parameter is used, for example, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 8 photoscenary.jl -s 5 -i &amp;quot;lowi&amp;quot; --over 1 -r 10 '''--proxy &amp;quot;&amp;lt;nowiki&amp;gt;http://192.168.0.9:8118&amp;lt;/nowiki&amp;gt;&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;quot;''&amp;lt;nowiki&amp;gt;http://192.168.0.9:8118&amp;lt;/nowiki&amp;gt;''&amp;quot; is the connection string to the proxy server.&lt;br /&gt;
&lt;br /&gt;
===--debug or -d===&lt;br /&gt;
Currently the program defines two levels of debugging:&lt;br /&gt;
&lt;br /&gt;
* level 1 &amp;lt;code&amp;gt;'''--debug 1'''&amp;lt;/code&amp;gt; adds a series of messages that are a function of the progress of the program, this can be useful when you suspect that the program is not downloading anything or that the network is really slow. The problem is that this option does not display the progress log well and therefore is only useful in special cases.&lt;br /&gt;
&lt;br /&gt;
*level 2 &amp;lt;code&amp;gt;'''--debug 2'''&amp;lt;/code&amp;gt; is also used to display any execution errors. If the system is properly configured they should be rare, but in some cases it is useful to be able to see them.&lt;br /&gt;
&lt;br /&gt;
=== --version===&lt;br /&gt;
It shows the program version and checks all the modules that need to be loaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl --version'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Photoscenary-version.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== --help or -h===&lt;br /&gt;
If you type the option -h or --help you get the complete list of options that can be recognized by the program, this list is obtained even if the option we enter or the value is not recognized, this is an example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ julia photoscenary.jl --help&lt;br /&gt;
The actiual Julia is 1.9.4 The current version is correct in order to obtain the best performances&lt;br /&gt;
&lt;br /&gt;
Photoscenary.jl ver: 0.4.00 date: 20230523 System prerequisite test&lt;br /&gt;
&lt;br /&gt;
The Photoscenary.jl program has started, it can be stopped with CTRL-C&lt;br /&gt;
&lt;br /&gt;
Photoscenery generator by Julia compilator,&lt;br /&gt;
Program for uploading Orthophotos files&lt;br /&gt;
&lt;br /&gt;
Version: ImageMagick 6.9.12-98 Q16 x86_64 18038 https://legacy.imagemagick.org&lt;br /&gt;
Copyright: (C) 1999 ImageMagick Studio LLC&lt;br /&gt;
License: https://imagemagick.org/script/license.php&lt;br /&gt;
Features: Cipher DPC Modules OpenMP(4.5) &lt;br /&gt;
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png raw tiff webp wmf x xml zlib&lt;br /&gt;
&lt;br /&gt;
ImageMagic is operative!&lt;br /&gt;
usage: &amp;lt;PROGRAM&amp;gt; [-g ARGS] [--map MAP] [--latll LATLL] [--lonll LONLL]&lt;br /&gt;
                 [--latur LATUR] [--lonur LONUR] [-a LAT] [-o LON]&lt;br /&gt;
                 [-x] [--png] [-i ICAO] [--route ROUTE] [-t TILE]&lt;br /&gt;
                 [-r RADIUS] [-s SIZE] [--sdwn SDWN] [--over OVER]&lt;br /&gt;
                 [--search SEARCH] [-p PATH] [--save SAVE] [--nosave]&lt;br /&gt;
                 [--connect CONNECT] [--proxy PROXY]&lt;br /&gt;
                 [--attemps ATTEMPS] [-d DEBUG] [--version] [-h]&lt;br /&gt;
&lt;br /&gt;
optional arguments:&lt;br /&gt;
  -g, --args ARGS      The arguments files in txt format&lt;br /&gt;
  --map MAP            The map server id (type: Int64, default: 1)&lt;br /&gt;
  --latll LATLL        Lower left area lat (type: Float64, default:&lt;br /&gt;
                       0.0)&lt;br /&gt;
  --lonll LONLL        Lower left area lon (type: Float64, default:&lt;br /&gt;
                       0.0)&lt;br /&gt;
  --latur LATUR        Upper right area lat (type: Float64, default:&lt;br /&gt;
                       0.0)&lt;br /&gt;
  --lonur LONUR        Upper right area lon (type: Float64, default:&lt;br /&gt;
                       0.0)&lt;br /&gt;
  -a, --lat LAT        Latitude in deg of central point (type:&lt;br /&gt;
                       Float64)&lt;br /&gt;
  -o, --lon LON        Longitude in deg of central point (type:&lt;br /&gt;
                       Float64)&lt;br /&gt;
  -x, --sexagesimal    Set the sexagesimal unit degree.minutes&lt;br /&gt;
  --png                Set the only png format files&lt;br /&gt;
  -i, --icao ICAO      ICAO airport code for extract LAT and LON&lt;br /&gt;
  --route ROUTE        Route XML for extract route LAT and LON&lt;br /&gt;
  -t, --tile TILE      Tile index es coordinate reference (type:&lt;br /&gt;
                       Int64)&lt;br /&gt;
  -r, --radius RADIUS  Distance Radius around the center point (nm)&lt;br /&gt;
                       (type: Float64, default: 0.0)&lt;br /&gt;
  -s, --size SIZE      Max size of image 0-&amp;gt;512 1-&amp;gt;1024 2-&amp;gt;2048&lt;br /&gt;
                       3-&amp;gt;4096 4-&amp;gt;8192 5-&amp;gt;16384 6-&amp;gt;32768 (type: Int64,&lt;br /&gt;
                       default: 2)&lt;br /&gt;
  --sdwn SDWN          Down size with distance (type: Int64, default:&lt;br /&gt;
                       0)&lt;br /&gt;
  --over OVER          Overwrite the tiles: |1|only if bigger&lt;br /&gt;
                       resolution |2|for all (type: Int64, default: 0)&lt;br /&gt;
  --search SEARCH      Search the DDS or PNG files in the specific&lt;br /&gt;
                       path&lt;br /&gt;
  -p, --path PATH      Path to store the dds images&lt;br /&gt;
  --save SAVE          Save the remove files in the specific path&lt;br /&gt;
  --nosave             Not save the DDS/PNG files&lt;br /&gt;
  --connect CONNECT    IP and port FGFS program, default value and&lt;br /&gt;
                       format: &amp;quot;127.0.0.1:5000&amp;quot;&lt;br /&gt;
  --proxy PROXY        Proxy string ipv4:port for example:&lt;br /&gt;
                       &amp;quot;192.168.0.1:8080&amp;quot;&lt;br /&gt;
  --attemps ATTEMPS    Number of download attempts (type: Int64,&lt;br /&gt;
                       default: 3)&lt;br /&gt;
  -d, --debug DEBUG    Debug level (type: Int64, default: 0)&lt;br /&gt;
  --version            Program version&lt;br /&gt;
  -h, --help           show this help message and exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Management coverage of tiles on the territory ==&lt;br /&gt;
From version 0.2.8 a more articulated method of managing the loading and distribution of the tiles has been added.&lt;br /&gt;
&lt;br /&gt;
=== Unloading of tiles on the territory assigned with a spiral rule ===&lt;br /&gt;
An algorithm performs the sequence of downloading the tiles as a function of the distance from the center. The download starts from the tiles closest to the center up to the last tiles downloaded which will be the ones farthest from the center.&lt;br /&gt;
&lt;br /&gt;
In this motion it is possible to start the download procedure in parallel with the execution of the Flightgear program.&lt;br /&gt;
&lt;br /&gt;
If you leave the airport where the plane is initially located and use the same airport as the center point (--icao lime for example) during take-off we will already have the tiles of the take-off area and therefore the scenario will appear well covered with orthographic images. During the climb of the plane it will therefore be probable that the following images will always give the pilot the illusion that the territory is well covered with images, even if we are only one part of the work. It will be enough for the pilot, from time to time, to update the scenario with the appropriate Flightgear menu.&lt;br /&gt;
&lt;br /&gt;
=== Database of all orthographic images uploaded in .dds format. ===&lt;br /&gt;
This database is loaded at the beginning of the download session and contains all the images present in the home directory of the user who launched the program.&lt;br /&gt;
&lt;br /&gt;
Before downloading the image from the designated website, the program checks in the database if the requested image is already present in the database, if the image is found in any directory of the home, it is copied to the current path. In this way it is possible to avoid carrying out a download job when the image is already present. Obviously the image must have and the pixel size requirements compatible with those required.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to distribute the images also on external supports and then make them converge on a working directory, usually with faster access (for example the system SSD). The only constraint is that the external media has a link that links it to a local folder.&lt;br /&gt;
&lt;br /&gt;
With this technique it is also possible to exploit virtual folders that rely on other repositories, for example those shared with P2P techniques.&lt;br /&gt;
&lt;br /&gt;
This example shows a mixed image download with database support. Images ('''copied''') are images copied from other directories on your system, ('''inserted''') are images inserted after a download from the image distribution web server. The images ('''skip''') are those already present in the folder of the images we are creating.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210606 212142.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
== Saving arguments in a text file ==&lt;br /&gt;
[[File:Julia Photoscenery Generator - args file.png|thumb|400x400px|Example of the contents in the '''args.txt''' file]]&lt;br /&gt;
Often the number and length of the arguments can become difficult to manage and therefore it is convenient to be able to save them on a file. For this reason, the '''--args''' (or '''-g''') parameter was introduced followed by a filename to be used as an argument container.&lt;br /&gt;
&lt;br /&gt;
Let's take an example to better understand how this parameter works:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The arguments associated with the launch of the program are: &amp;lt;code&amp;gt;-i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we add the '''--args test.txt''' parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20 --args test.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the directory where we ran the program we will find a new file called test.txt which contains the list of the parameters just entered.&lt;br /&gt;
&lt;br /&gt;
It is now possible to recall the parameters entered using the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl test.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The test.txt file, first created, can be edited with a simple text file editor and then modified according to our needs.&lt;br /&gt;
&lt;br /&gt;
=== Arguments implicit saving ===&lt;br /&gt;
Launching the program with parameters, but without the '''--args''' option, still generates an arguments file called '''args.txt'''&lt;br /&gt;
&lt;br /&gt;
This file can be recalled for the next program run, simply by running the program with no arguments.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The args.txt file is generated and the program, if run without parameters, will search the args.txt file and load it again using the previous parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program runs exactly as in the previous execution.&lt;br /&gt;
&lt;br /&gt;
== Recipes to be able to try the program and live satisfied ==&lt;br /&gt;
There are quite typical configurations that can give a lot of satisfaction to those who want a photorealistic vision, here I give some examples that can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
==== The simplest ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will rerun with the last commands. The last commands are read from the file &amp;quot;args.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At the first run, this will establish a telnet session where photoscenery is downloaded on demand from your flightgear instance;&lt;br /&gt;
see [[Julia_photoscenery_generator#Dynamically_download_orthographic_images_by_--connect]].&lt;br /&gt;
&lt;br /&gt;
==== The scenario of the airport closest to you ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''If we live near Innsbruck LOWI is the closest airport.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''-i''' followed by the airport abbreviation ICAO, allows you to download that area for a radius of 20 nm ('''-r 20''') and resolution 8K pix ('''-s 4''')''&lt;br /&gt;
&lt;br /&gt;
==== A flight plan has been generated with Skyvector &amp;lt;nowiki&amp;gt;https://skyvector.com/&amp;lt;/nowiki&amp;gt; ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl -s 4 -r 20 --sdwn 1 --over 1 --route &amp;quot;LIMJ.gpx&amp;quot; --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''The area is processed along a route defined with '''[https://skyvector.com/ Skyvector]''' (but the same methodology also applies to the one defined with the FGFS route planner). The program parses the xml file inserted as a parameter of '''--route''' and determines the format.''&lt;br /&gt;
&lt;br /&gt;
==== The scenario is shown along the route ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -r 20 -s 3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''-t 10''' tells the compiler that it can use up to 10 CPUs, this speeds up the download speed by 2-5 times. '''--connect''' allows you to connect to the Flightgear program (obviously if remote control has been activated (with port 5000) with the launch option of FGFS --telnet = 5000. The parameter '''-s 3''' means that the images will be 4096 pix, a good resolution for flights above 3000 ft.''&lt;br /&gt;
&lt;br /&gt;
==== '''The images are saved for later reuse''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''--save''' shows the possibility to save the images also in an external drive, in this way it is possible to create collections of images even in the order of TB avoiding using the system disk space.&lt;br /&gt;
&lt;br /&gt;
'''--over 2''' It allows the replacement of images already present in the path directory, even if of higher resolution.&lt;br /&gt;
&lt;br /&gt;
'''The images are saved for later reuse and the operational image directory is defined by the path option.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 1 --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Generation of tiles along the route with maximum efficiency and quality ====&lt;br /&gt;
If you want to have a high quality scenario along the route, but at the same time light enough to allow the generation of images in good synchronization with the flight, you must enter the option '''--sdwn''' which, [[Julia photoscenery generator#The --sdwn parameter|as explained before]], allows you to automatically reduce the size of the tiles with the distance, in this way if the tile is distant a small tile is downloaded, if instead the tile is close, the downloaded tile is larger , at most the dimensions are those declared with the --s option. In this way it is possible to fly with a fairly synchronized scenario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 --over 1 --sdwn 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you want to get a faster loading of the images that are loaded along the route, remember that the program can overwrite the previous higher resolution images with lower resolution images '''without losing''' the images already downloaded, as they will be inserted in a area outside the scenario (for example a different disk) that can be reached with the path defined with the [[Julia photoscenery generator#--save|--save]] parameter.&lt;br /&gt;
&lt;br /&gt;
This option means that instead of overwriting the images, the program first saves the files, then downloads the images from some external server and then overwrites them. With this technique the overall loading of the images (tiles) is faster as it is useless to download large images of 4-8-16 K pixels placed in distant areas from the pilot's point of view.&lt;br /&gt;
&lt;br /&gt;
Therefore, to minimize the images it is necessary to communicate to the program that it will be able to overwrite the images with the option: [[Julia photoscenery generator#The --over parameter|--over 2]] But since the '''--save''' option is inserted, the program will not delete the previous images, but will insert them in the designated saving areas.&lt;br /&gt;
&lt;br /&gt;
At this point a good command can be this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; '''--save''' &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 '''--over 2''' '''--sdwn 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''However, it must always be remembered that currently FGFS does not reload the images of the scenario automatically, but you must click on the debug menu under reload scenario.''&lt;br /&gt;
&lt;br /&gt;
It is possible to avoid entering the --path and --save commands if you adopt the automatic path search method that is activated with --connect active. This makes the command simpler, but obviously you lose the ability to allocate unused images to a certain area on an explicit directory, this is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 '''--over 2''' '''--sdwn 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example of loading multiple scenarios ===&lt;br /&gt;
It is possible to use two sessions of photoscenary.jl at the same time to have an updated low resolution scenario (''obviously this method only makes sense if the route follows a path in which a tiles load has never been performed''). The first session will have a low resolution '''-s 1''' or '''-s 2''' while the second resolution could be much higher, e.g. '''-s 4''' or '''-s 5'''&lt;br /&gt;
&lt;br /&gt;
With this configuration it is very likely that the download speed of the orthophoto server you have selected is sufficient to show the images of the territory at low resolution (''remember that currently FGFS requires the manual scenario update if we want to see the scenario just written''), while the second program proceeds to download the images at a higher resolution which will then be visible only in a second flight, obviously on the same route (''it is very unlikely that from resolutions of '''-s 4''' onwards the images can be downloaded with the same speed with which you fly over the territory'').&lt;br /&gt;
&lt;br /&gt;
In this example I have given '''4 cores''' to the high resolution scenario, and '''3 cores''' to the lower resolution scenario. The number of cores cannot exceed the maximum allowed by your CPU, therefore the program, if this number exceeds the available one, automatically reduces the number of cores.&lt;br /&gt;
&lt;br /&gt;
The presence of the '''--over 1''' parameter is fundamental, which manages the insertion of images according to the resolution. However, remember that the low resolution images that will be replaced will not be deleted if you have entered the '''--save''' parameter with the relative save path.&lt;br /&gt;
&lt;br /&gt;
==== High resolution scenario tasks -s 4 (8K) and -r 10 ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia '''-t 4''' photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; '''-s 4 -r 10 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Low resolution scenario tasks -s 2 (2K) and -r 20 ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia '''-t 3''' photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; '''-s 2 -r 20 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the generated photo scenery in FlightGear==&lt;br /&gt;
1. Inform FG about additional directory with scenery tiles:&lt;br /&gt;
''--fg-scenery=/your/path/to/photoscenery/directory/''&lt;br /&gt;
either in command line or as extra options in launcher.&lt;br /&gt;
&lt;br /&gt;
E.g. if you have a directory structure like ''C:\FlightGear\fg_customscenery\photoscenery\Orthophotos\e000n40\e007n46'' then use ''--fg-scenery=C:\FlightGear\fg_customscenery\photoscenery''&lt;br /&gt;
&lt;br /&gt;
2. Check the option Menu &amp;gt; View &amp;gt; Rendering Options &amp;gt; Satellite Photoscenery.&lt;br /&gt;
&lt;br /&gt;
== Use the maps generated by photoscenary.jl for professional applications ==&lt;br /&gt;
The photoscenary.jl application allows you to generate maps even only in .png format useful to assemble with gimp (or other painting graphics programs) as the generation of the images guarantees the correct connection. Obviously, reference is made to cylindrical coordinates that must eventually be deformed in case you want to work with a different cartographic model. Currently the program defines the possibility of operating with some image sources defined in the parameter file '''params.xml''' in the sub-section ''&amp;lt;servers&amp;gt; ... &amp;lt;/servers&amp;gt;''. Those that offer the most permissive license conditions are produced by USGS (USA) which is an American federal enete and therefore does not bind which all maps with particular limitations of use, the same rules apply as the otographic images produced by NASA that are used in Flightgear for images of the Earth as seen from space.&lt;br /&gt;
&lt;br /&gt;
If one wants to read the terms of use, he can refer to what is reported in [https://www.usgs.gov/faqs/are-usgs-topographic-maps-copyrighted this USGS link].&lt;br /&gt;
&lt;br /&gt;
=== Download images for professional use or publications ===&lt;br /&gt;
This paragraph is based on the terms of use of the USGS server, so they may not apply to other servers reachable with this program. The server, as you can see by reading the USGS params.xml file, has '''id = 2'''. For use not related to flightgear it is normally useful to work with files in .png format as the .dds is used only for simulation or games. For technical applications a pair of coordinates is normally used which are: Upper right (UR) and Lower Left (LL) of the requested area. You can also find a set of images using polar coordinates and a radius in nautical miles.&lt;br /&gt;
&lt;br /&gt;
Let's now give one examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 6 photoscenary.jl -s 5 --latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.3 --map 2 &amp;lt;small&amp;gt;--png -p&amp;lt;/small&amp;gt;''' ''&amp;lt;small&amp;gt;'''&amp;quot;'''&amp;lt;/small&amp;gt;'''''&amp;lt;small&amp;gt;/some path/ortho&amp;quot;&amp;lt;/small&amp;gt;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The coordinates are defined in:&lt;br /&gt;
&lt;br /&gt;
'''-s 5''' is the resolution of the images (s 5 -&amp;gt; 16384 pix for tile)&lt;br /&gt;
&lt;br /&gt;
'''--latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.3'''&lt;br /&gt;
&lt;br /&gt;
Coordinates in six hundredth degrees.&lt;br /&gt;
&lt;br /&gt;
'''--map 2''' indicates that the images will be downloaded from the USGS server.&lt;br /&gt;
&lt;br /&gt;
'''--png''' means that the images WILL NOT BE CONVERTED to .dds but will remain in .png!&lt;br /&gt;
&lt;br /&gt;
'''-p &amp;quot;''&amp;lt;path&amp;gt;''&amp;quot;''' Defines the path where the images will be downloaded.&lt;br /&gt;
&lt;br /&gt;
'''-x''' If the coordinates are expressed in sexagesimal degrees, just enter this additional parameter, &lt;br /&gt;
&lt;br /&gt;
In this case the decimal part of the coordinate value is in prime, for example:&lt;br /&gt;
&lt;br /&gt;
'''--latll 21.50 --latll 158.50'''&lt;br /&gt;
&lt;br /&gt;
It is equivalent to writing:&lt;br /&gt;
&lt;br /&gt;
'''-x --latll 21.30 --lonll 158.30'''&lt;br /&gt;
&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Photoscenery]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021 - May 2021)&lt;br /&gt;
*{{forum link|t=38057|title=16k Photoscenery}} (September 2020 - Gen 2021)&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery]]&lt;br /&gt;
[[Category:Scenery software]]&lt;br /&gt;
[[Category:Photoscenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Julia_photoscenery_generator&amp;diff=139667</id>
		<title>Julia photoscenery generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Julia_photoscenery_generator&amp;diff=139667"/>
		<updated>2024-04-13T07:38:20Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* The simplest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = G91R1B taking off from LOWI .jpg|128px&lt;br /&gt;
|developedby         = Adriano Bassignana&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Photoscenery generator&lt;br /&gt;
|latestrelease       = (rolling releases)&lt;br /&gt;
|initialrelease      = 18.04.2021&lt;br /&gt;
|writtenin           = julia&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v2&lt;br /&gt;
|website             = https://github.com/abassign/Photoscenary&lt;br /&gt;
}}&lt;br /&gt;
[[File:G91R1B taking off from LOWI .jpg|thumb|500px|Photoscenery created with the Julia photoscenery generator behind a [[FIAT G91R1B|G91R1B]] taking off from LOWI. In this example the resolution of the tiles is 32K (s 6).]]&lt;br /&gt;
&lt;br /&gt;
Through the '''Julia photoscenery generator''' using ImageMagic and written in the Julia programming language you can create photoscenery tiles.&lt;br /&gt;
&lt;br /&gt;
Once you have everything installed you will discover how easy it is to fill your disk with hundreds of GB made from thousands of images of our planet and then fly over vast territories and recognize our cities and villages.&lt;br /&gt;
&lt;br /&gt;
The use of World Scenery by FlightGear together with the photoscenery as a background can make the scene very rich in details and pleasing to your eyes.&lt;br /&gt;
== Quick method for Windows users ==&lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. [https://julialang.org/downloads/#official_binaries_for_manual_download Down-Inst Julia Programming Language].&lt;br /&gt;
* 2. [https://imagemagick.org/script/download.php#windows Down-Inst ImageMagick].&lt;br /&gt;
* 3. [https://github.com/abassign/Photoscenary/archive/refs/heads/main.zip Down-Inst photoscenary.jl.zip] Easy Manual installation. Unzip Fhotoscenary-main folder, place it where you preferred. Look inside for the file photoscenary.jl and make it executable by Julia, using Right click &amp;gt;&amp;gt; Properties &amp;gt;&amp;gt; Navigate to the bin folder Julia.exe and choose open with Julia Programming Language.&lt;br /&gt;
===Check===&lt;br /&gt;
* 4. Open FGlauncher &amp;gt;&amp;gt; Settings &amp;gt;&amp;gt; Additional settings. Add the property: --telnet=5000&lt;br /&gt;
* 5. Make sure you have terrasync activated. Automatic download terrain in FGlauncher.&lt;br /&gt;
* 6. In FlightGear v2020.3.18 check the following: Start the simulator (one flight) and access the menu: VIEW/RENDERING OPTIONS. In the right column, make sure you have the &amp;quot;SATELLITE PHOTOSCENERY&amp;quot; option activated and close the flight.&lt;br /&gt;
===Run &amp;amp; Check===&lt;br /&gt;
* 7. Run the program photoscenary.jl. It will run and check with Julia, will prompt telnet connection attempts at 127.0.0.1:5000.&lt;br /&gt;
* 8. Run FG. Fly and check visually that you are getting textures. Give it a time, you'll get better textures progressively during your flight. &lt;br /&gt;
* 9. Check in C:\Users\YOUR_USER_NAME\FlightGear\Downloads\TerraSync\Orthophotos. You should see folders of type &amp;quot;e000n00&amp;quot; containing &amp;quot;.dds&amp;quot; files.&lt;br /&gt;
* 10. Check that the Julia's window running photoscenary.jl is getting data (tiles).  &lt;br /&gt;
&lt;br /&gt;
In case of doubts, the next video at SUMU Montevideo area by Manuel Aceña is recommended as a reference.&lt;br /&gt;
=== Video  ===&lt;br /&gt;
{{#ev:youtube|PbYAvxmAkIc}}&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The success that photoscenery is achieving among FlightGear users has prompted me to study a program for downloading and installing photoscenery via a simple command to run inside a terminal (if we are in Linux or Mac OS) or in a command prompt (if we are in Windows).&lt;br /&gt;
&lt;br /&gt;
The program was developed in Julia which is a latest generation programming language developed by MIT. This language looks quite similar to Nasal and therefore the code is easily readable by those who already use the FlightGear Nasal language script, but it is extremely faster and full of features that make the creation of this program quick and easy enough to evolve. Obviously the only inconvenience is that Julia has to be installed on your system, but it is a very simple action and equivalent to the same need to install ImageMagick on your system, this latter program allows the conversion of images in DDS format.&lt;br /&gt;
[[File:Julia photoscenery generator - Towards Budapest on the Danube plain.jpg|thumb|500x500px|The photoscenary allows to have very realistic effects on rather complex territories, such as crops in the plains. The image shows the signs of the passage of old rivers, still visible as a difference in the color of the vegetation.]]&lt;br /&gt;
&lt;br /&gt;
==Installing the programs==&lt;br /&gt;
&lt;br /&gt;
=== FlightGear ===&lt;br /&gt;
Currently to utilise photoscenery the minimum FlightGear version is 2020.3.18&lt;br /&gt;
&lt;br /&gt;
===Julia installation===&lt;br /&gt;
https://julialang.org/&lt;br /&gt;
&lt;br /&gt;
Julia installation is straightforward, whether using precompiled binaries or compiling from source. Download and install Julia by following the instructions at https://julialang.org/downloads/. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Windows&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (installer), 64-bit (portable)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |32-bit (installer), 32-bit (portable)&lt;br /&gt;
|-&lt;br /&gt;
!macOS&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on x86&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (GPG), 64-bit (musl) (GPG)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | 32-bit (GPG)&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on ARM&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (AArch64) (GPG)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |32-bit (ARMv7-a hard float) (GPG)&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on PowerPC&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |64-bit (little endian) (GPG)&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Generic FreeBSD on x86&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | 64-bit (GPG)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
For Linux users there are no particular problems, each distribution has Julia among the installable programs. The only problem is the version that may be older than 1.6, in this case I recommend wasting a little more time and updating the installation to 1.6, you can follow [https://medium.com/coffee-in-a-klein-bottle/install-julia-1-5-on-ubuntu-bb8be4b2571d this handy guide]  that explains how to do everything in a few minutes.&lt;br /&gt;
&lt;br /&gt;
The version to use is convenient that it is from '''1.6''' onwards, 1.5.4 is present in the Ubuntu repositories until 2020.10 but it is better to update it to 1.6 even if this requires a little work, But with Ubuntu/Kubuntu version 2021.4 Julia is already at version 1.6.1 and so just use the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''sudo apt install julia'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Julia is a young language that is continuously updated and the difference between Julia 1.5 and 1.6 is really very big for the application startup speed. For the execution there are no particular differences if you use Julia 1.5.4 onwards.&lt;br /&gt;
&lt;br /&gt;
The installation with windows is absolutely the easiest to do, just follow the installer to get a version of Julia 1.6.x All users who have done the installation have never complained of problems.&lt;br /&gt;
&lt;br /&gt;
For '''Mac users''' it might be the slightly more complicated thing, but from the users texts made, I haven't had any issues encountered among Mac users.&lt;br /&gt;
&lt;br /&gt;
For '''Windows users''' have not encountered any particular problems with the installation, which is always the most up-to-date.&lt;br /&gt;
&lt;br /&gt;
{{caution&lt;br /&gt;
|The program was designed to work in Linux (any distribution), Windows 10 and Mac OS. This is very unlikely to work with CygWin as there have been reports of problems calling Imagemagick. Instead, it works with Windows Subsystem for Linux, which is basically a well-integrated emulator of Linux inside the Windows system. In this case, multithreading may not work well, so I recommend running the program with only one Julia thread via the command:&amp;lt;BR&amp;gt;&amp;lt;i&amp;gt;julia -t 1 photoscenary.jl ...&amp;lt;/i&amp;gt;&amp;lt;BR&amp;gt;Or with the command:&amp;lt;BR&amp;gt;&amp;lt;i&amp;gt;julia photoscenary.jl&amp;lt;/i&amp;gt;&amp;lt;BR&amp;gt;But this approach seems like an unnecessary complication to me as the program works perfectly in Windows 10.&lt;br /&gt;
| width   =&lt;br /&gt;
| padding =&lt;br /&gt;
| margin  = 2%&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===ImageMagick installation===&lt;br /&gt;
https://imagemagick.org/index.php&lt;br /&gt;
&lt;br /&gt;
For download program this is the link: https://imagemagick.org/script/download.php&lt;br /&gt;
&lt;br /&gt;
Normally the files that are released by satellite image servers are in PNG format, but the PNG files are absolutely unsuitable to be used as photoscenery files. The reason is that the graphics engine of FlightGear must still convert these files into DDS format which is more compressed than the PNG format (about 4 times). Conversion, for very large files, takes a lot of CPU time, slowing down the execution of FlightGear. Therefore for this program it has been chosen to release only the DDS format and therefore ImageMagick is the most suitable program for this operation.&lt;br /&gt;
&lt;br /&gt;
ImageMagick allows you to convert files transparently to the user very quickly.&lt;br /&gt;
&lt;br /&gt;
In Linux distributions, ImageMagick is often already present, to find out just type the command &amp;lt;code&amp;gt;'''convert --version'''&amp;lt;/code&amp;gt; and see if something responds. In windows it must be downloaded with an installer that can be downloaded here: https://imagemagick.org/script/download.php#windows&lt;br /&gt;
&lt;br /&gt;
The installation in Windows of ImageMagick could give problems if it has not been correctly carried out. Therefore, if the photoscenary.jl program returns an error due to the lack of ImageMagick (the program always checks at the start) it is convenient to remove ImageMagick through the Windows program management and install it again.&lt;br /&gt;
&lt;br /&gt;
===The photoscenary.jl installation===&lt;br /&gt;
https://github.com/abassign/Photoscenary&lt;br /&gt;
&lt;br /&gt;
The program is written in pure Julia code, there are no scripts that can complicate your life. However, some rules must be followed that simplify all the work.&lt;br /&gt;
&lt;br /&gt;
First create a directory where to place the program and its support files. The directory can be placed wherever you want as the program will dynamically build its references. Once the directory (or folder for Mac users) is done, download the Zip file that GitHub generates obtained from this link: https://github.com/abassign/Photoscenary.git&lt;br /&gt;
&lt;br /&gt;
[[File:Github for photoscenary.jl.png|alt=|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Click on code and it will download the zip file that you can open and insert the contents into the folder you created. In the folder you will find some auxiliary files, but now let's analyze the program files.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;'''photoscenary.jl'''&amp;lt;/code&amp;gt;  It is the Julia program to run, you can open it and see it with a simple text editor, I think some of you who have programmed in Python or NASAL will have no difficulty understanding how it works. However the program is compiled every time you run it, it is this compilation, really efficient and fast, that allows you to obtain an excellent executive performance.&lt;br /&gt;
*&amp;lt;code&amp;gt;'''params.xml'''&amp;lt;/code&amp;gt;  It is an XML file that contains some parameters necessary for the correct execution of the program.&lt;br /&gt;
*&amp;lt;code&amp;gt;'''airports.csv'''&amp;lt;/code&amp;gt;  It is the file, extracted from the correspondent of FlightGear, which contains a list of airports, their coordinates and the extended name. This file is essential in order to use a location option for the area to be downloaded.&lt;br /&gt;
&lt;br /&gt;
==Execution of the program ==&lt;br /&gt;
&lt;br /&gt;
===Hello World!===&lt;br /&gt;
There is a minimal execution that allows you to check if everything we have done has worked correctly, this is a sort of ''Hello World'' of the program.&lt;br /&gt;
&lt;br /&gt;
The most important thing is to go to the directory (folder) where you installed the program with a ''terminal'' or with a ''command prompt'' (if you are in Windows).&lt;br /&gt;
&lt;br /&gt;
So the first thing to do is to be with the terminal inside this directory and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia photoscenary.jl'''&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An area of 2048 pixels (long side) tiles with a size of approximately 10x10 NM is generated, with the coordinates of the ''Orio al Serio Airport'' (LIME) in the center. Not having entered any other parameters, the processing time is relatively long as only one download per tile is performed. &lt;br /&gt;
&lt;br /&gt;
[[File:Test julia photoscenary.jl.png|frameless|800x800px]] &lt;br /&gt;
&lt;br /&gt;
We carefully observe this execution, the first line shows the name of the program, the version and the date of realization, then follows the indication that the prerequisite test will take place. If we are at the first execution we will see an endless series of compilations that can make us think that something has not gone well, but do not worry, it is simply the module management system that downloads the modules useful for the execution of the program and that are not present in the base system. In this way the Julia program updates the necessary components without having to prompt the user to do it for him. &lt;br /&gt;
&lt;br /&gt;
In this particular case, which occurs only the first time or in a version change, the application communicates that it will terminate the execution and invites the user, once back to the command prompt, to run the same command again, also in this case there could be a lot of updating of the modules that have not been updated in the first cycle, do not worry, everything is going great. At the end of the update, finally, the execution of the code contained in the program takes place.&lt;br /&gt;
&lt;br /&gt;
The image above summarizes what happened during the download of the tiles.&lt;br /&gt;
&lt;br /&gt;
Very important to note the line:&lt;br /&gt;
&lt;br /&gt;
'''ImageMagick is operational!'''&lt;br /&gt;
&lt;br /&gt;
This line tells us that the system has done a test with ImageMagick installed on its system and has verified that it works correctly. If this does not work, since without ImageMagick the system cannot do anything, you have an exit with a program error (Error code 504).&lt;br /&gt;
&lt;br /&gt;
====Description of the individual status lines of the processes performed====&lt;br /&gt;
We now summarize the content of the individual lines that indicate the modules downloaded and their status:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Column!!Content&lt;br /&gt;
|-&lt;br /&gt;
!Time:&lt;br /&gt;
|Processing time for individual tiles&lt;br /&gt;
|-&lt;br /&gt;
!elab:&lt;br /&gt;
|Total processing time&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
( ... {{!}} ... ) &amp;lt;!-- This must be on a separate line for the table to render it properly, even though {{!}} helps break it less. --&amp;gt;&lt;br /&gt;
|The processing time for each tile followed by the estimated time.&lt;br /&gt;
These two values allow us to understand the efficiency of the work in progress.&lt;br /&gt;
|-&lt;br /&gt;
!Tiles:&lt;br /&gt;
|Number of tiles that have been processed by the program.&lt;br /&gt;
|-&lt;br /&gt;
! on&lt;br /&gt;
|Total number of tiles to be processed.&lt;br /&gt;
|-&lt;br /&gt;
!res&lt;br /&gt;
|The residual tiles to be processed.&lt;br /&gt;
|-&lt;br /&gt;
!Th:&lt;br /&gt;
|Number of threads used by the process.&lt;br /&gt;
|-&lt;br /&gt;
!path:&lt;br /&gt;
| The path and name of the processed file.&lt;br /&gt;
|-&lt;br /&gt;
!MB/s:&lt;br /&gt;
|Download speed in Mega Bytes on second.&lt;br /&gt;
|-&lt;br /&gt;
!MB dw:&lt;br /&gt;
|Amount of mega bytes downloaded overall.&lt;br /&gt;
|-&lt;br /&gt;
!( ... )&lt;br /&gt;
| Type of activity carried out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Activate the Julia multi thread ===&lt;br /&gt;
Julia is a language created for applications on supercomputers, artificial intelligence, number-crusher, etc.&lt;br /&gt;
&lt;br /&gt;
These are applications that require systems with a lot of CPUs and therefore the compiler has the ability to activate very sophisticated strategies to better manage resources.&lt;br /&gt;
&lt;br /&gt;
The photoscenary.jl program performs many processes in parallel in order to optimize the download and conversion of images. The conversion from the original PNG format to the more efficient format for FlightGear DDS requires a rather heavy application (ImageMagick) which can only be run on single CPUs. For this it is very efficient to run the program on multiple CPUs, but it is necessary to use some care that I explain below.&lt;br /&gt;
&lt;br /&gt;
==== Core &amp;lt;-&amp;gt; CPU what are they ? ====&lt;br /&gt;
Any PC has a processor with a certain number of ''physical'' ''core'' ranging from 2 (Intel i3) to values that can go up to 12 or more for more performing desktop processors.&lt;br /&gt;
&lt;br /&gt;
For years, all processor cores have been able to handle two separate CPU, using a hardware trick. Therefore an i3 processor with two core will allow to manage up to 4 CPU (or separate processes) at the same time.&lt;br /&gt;
&lt;br /&gt;
At this point it is important the role of the operating system that must manage the available CPU and assign them to the running programs.&lt;br /&gt;
&lt;br /&gt;
So when you start Julia it is possible to reserve the number of CPU to the application will require than and this must be done at the beginning so that the compiler will configure the code properly.&lt;br /&gt;
&lt;br /&gt;
This is achieved with the '''-t n''' command where n is a number equal to or less than the number of available CPU.&lt;br /&gt;
&lt;br /&gt;
==== The Julia -t n option ====&lt;br /&gt;
If you run the program with the command:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Only one CPU will be used and this can be a bottleneck when downloading files from the web server that distributes the images, since, especially if you have images composed of a single file (from the smallest ones up to 2048 pixels) the program uses only one process (for larger images the program uses many more download processes).&lt;br /&gt;
&lt;br /&gt;
So let's say we have a machine with 6 core and therefore 12 CPU we can launch the program with this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we are on a 4 CPU as i3 it is necessary to reduce the value to 4, but maybe 3 would also be good, so we can write the command like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 3 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Be careful though ====&lt;br /&gt;
''If the value of the maximum number of CPU is too high, the behavior of the operating system could be such as to reduce the advantage in execution or even slow down the program!''&lt;br /&gt;
&lt;br /&gt;
This certainly happens when the value of the '''''-t''' numbe''r is higher than the number of CPUs and if the system is windows 10 or 8 you will have an incredible slowdown of the program! Therefore on a Windows machine it is not advisable to always enter a value less than or equal to the number of CPU of the processor in use (''number of cores multiplied by 2'').&lt;br /&gt;
&lt;br /&gt;
For Linux and Mac systems the problem seems to be less evident and so you can try to increase the number beyond the theoretical maximum value.&lt;br /&gt;
&lt;br /&gt;
=== Now let's try to delete all the files just inserted===&lt;br /&gt;
This test allows us to understand the use of a very useful parameter to manage the files we create with this application, for example if we want to delete the files, perhaps to have an area managed with the traditional FlightGear system, we can do it with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl --over 9'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will get this result (I show only the last lines to focus attention on the fact that the system declares to perform some removes)&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia photoscenary.jl --over 9.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
===Now lets put the turbojet into the download program===&lt;br /&gt;
We now put the &amp;lt;code&amp;gt;'''-t 10'''&amp;lt;/code&amp;gt; option on the Julia compiler start command. This option allows you to run multiple threads at the same time allowing you to speed up the download of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In this image I show all the lines processed to show how the progression of the download speed increase. As you can see at first the speed seems low, but in reality the system has launched about ten threads that form a queue of requests to the image server. The format of the images, when nothing is declared, as in this example, is 2048 pixels on the long side, and the size of the DDS file (we are at an intermediate latitude between 62-22 degrees) is 1 MB.&lt;br /&gt;
&lt;br /&gt;
The average speed is 1.7 MB/s (but can go even higher) and is determined by the actual workload on the server distributing the images.&lt;br /&gt;
&lt;br /&gt;
This way we have more than tripled the download speed.&lt;br /&gt;
&lt;br /&gt;
Obviously these values ​​can change a lot, but they are on average better than those obtained with single downloads. Not only that, but multithreading also works with the ImageMagick program that performs the transformation of the PNG file into DDS, this transformation is not fast, but in this way it is parallelized, making this phase less expensive in terms of time.&lt;br /&gt;
&lt;br /&gt;
This feature is even more interesting for larger format images.&lt;br /&gt;
&lt;br /&gt;
===Increase the resolution of the images, radius and --over option===&lt;br /&gt;
Let's see these two new options that can be given to the program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-r 5'''&amp;lt;/code&amp;gt; where n is the number of miles of radius, if &amp;lt;code&amp;gt;'''-r'''&amp;lt;/code&amp;gt; (Radius) is equal to 5 it means that we are covering a square whose diagonal is 5 NM. Note that if -r is not defined the system considers the radius of 10 NM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; indicates the resolution of the images we want to obtain, if this option is not inserted the default value is 2 equal to an image, on the long side, of 2048 pixels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;j'''ulia -t 10 photoscenary.jl -r 5 -s 4'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 5 -s 4 (skip).png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In fact the system has not done anything, the status message, at the bottom of each line, tells us (skip) which means that the program has seen that an image is already present and this image cannot be overwritten as it is an image valid (actually the program checks the image by loading and verifying it), if the image was not valid, it would delete it and replace it with a new one.&lt;br /&gt;
&lt;br /&gt;
But it is still possible to override by inserting the &amp;lt;code&amp;gt;'''--over 1'''&amp;lt;/code&amp;gt; option at this point this interesting fact happens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 4 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 5 -s 4 --over 1.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
This download is '''16 times slower''' as the precedent download (Without the &amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt; option the image downloads as &amp;lt;code&amp;gt;-s 2&amp;lt;/code&amp;gt; which corresponds to 2048 pixels long edge) &amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; option downloads images of '''8192''' pixels long side. In fact the system downloads 16 images with size of '''2048''' and composes them into a matrix '''4x4,''' at the end of the composition the images are first transformed into an temporary PNG image format which will be processed by ImageMagick and becomes an DDS format image that is compatible with FlightGear without any on-the-fly conversion (which is done for PNG images). Therefore this line shows us the downloading of the single images that make up the matrix in order to give an idea that something is happening.&lt;br /&gt;
&lt;br /&gt;
[[File:Julia -t 10 photoscenary.jl -r 5 -s 4 --over 1-BW.png|alt=|frameless|799x799px]]&lt;br /&gt;
&lt;br /&gt;
Note that the download speed of individual images has increased (in this case 2.98 MB/s) as the system has opened several dozen download threads (96 download tasks are open at the same time as their number is the product of 6 threads x 16 images) .&lt;br /&gt;
&lt;br /&gt;
It is important to understand this aspect of the program which can easily bring the network into saturation. In this example 3 MB/s correspond to about 30-40 MBit/s which is about 70-80% of the bandwidth that the network allows me to have. For this, if the band used is high, in order to keep a good surfing speed on the network, it is sufficient to reduce the value of the threads in Julia from -t 10 to -t 4 or -t 5.&amp;lt;blockquote&amp;gt;'''Note''': ''Julia is a programming language that has an incredible variety of methods for exploiting all possible hardware solutions. What I exploit in this program is only a small part, Julia even allows you to distribute the processing on remote machines, perhaps placed on different networks, in order to distribute the workload through the use of a few instructions.''&amp;lt;/blockquote&amp;gt;From a series of tests that I have done, 8K images are the most interesting for systems that have at least 16 GB of RAM, if the RAM is lower these images can lead to FlightGear in memory overflow and therefore its closure by the system operating.&lt;br /&gt;
&lt;br /&gt;
==== The -s parameter ====&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s'''&amp;lt;/code&amp;gt; defines 7 possible resolutions for images:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter!!Side px!! Format!!Size MB!! Comment&lt;br /&gt;
!PC RAM GB&lt;br /&gt;
|-&lt;br /&gt;
!-s 0&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|512&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|0.064&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
!-s 1&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|1024&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|0.256&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
!'''-s 2'''&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2048&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|1&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4&lt;br /&gt;
|-&lt;br /&gt;
!-s 3&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4096&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4&lt;br /&gt;
|2 x 2 matrix = 4 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|8&lt;br /&gt;
|-&lt;br /&gt;
!'''-s 4'''&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|8192&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|4 x 4 matrix = 16 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|-&lt;br /&gt;
!-s 5&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16384&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|64&lt;br /&gt;
|8 x 8 matrix = 64 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|-&lt;br /&gt;
!-s 6&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|32768&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|256&lt;br /&gt;
|8 x 8 matrix = 64 images with 4096 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|}&lt;br /&gt;
The PC RAM that I recommend for PCs that need to download images. So I was able to download, even with Windows 10, which is much heavier than Linux, 16384 px images with only 4 GB of RAM! In this case there is a huge increase in virtual memory (''Both Linux with kernel 5 and Windows 10 have a dynamic virtual memory that is quite efficient if the hard disk is of the SSD type'') in use which, due to the structure of the program and the particular compiler used, it does not seem to slow down performance.&lt;br /&gt;
&lt;br /&gt;
==== The --sdwn parameter====&lt;br /&gt;
&amp;lt;code&amp;gt;'''--sdwn'''&amp;lt;/code&amp;gt; It is a parameter that defines how to change the value of the resolution or the distance using a linear method. For example, if the coverage radius is 100 nm and -s 5 (16K pixels), if we set &amp;lt;code&amp;gt;'''--sdwn 2'''&amp;lt;/code&amp;gt; we will have this resolution trend:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Dist. (nm)&lt;br /&gt;
!0&lt;br /&gt;
!10&lt;br /&gt;
!20&lt;br /&gt;
! 30&lt;br /&gt;
!40&lt;br /&gt;
! 50&lt;br /&gt;
!60&lt;br /&gt;
!70&lt;br /&gt;
!80&lt;br /&gt;
!90&lt;br /&gt;
!100&lt;br /&gt;
|-&lt;br /&gt;
!Res. (0..6)&lt;br /&gt;
|5&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
As can be seen from the table, the resolution in pixels of the images varies with the distance from the center (radius).&lt;br /&gt;
&lt;br /&gt;
With this method it is possible to obtain very large coverage without occupying too much memory and greatly reducing download times. Certainly the quality of the farther images is lower, but the problem could be not very perceptible as normally an airplane when it takes off is low on the ground and therefore the pilot wishes to have a high resolution (images with many pixels), but then rises in altitude and the resolution of the terrain is acceptable although much lower. With this method it is possible to cover large areas of land in a very short time, shorter than the flight necessary to cross that territory.&lt;br /&gt;
&lt;br /&gt;
====The --over parameter====&lt;br /&gt;
A second important fact is the &amp;lt;code&amp;gt;'''--over 1'''&amp;lt;/code&amp;gt; parameter which tells the system it can overwrite, the &amp;lt;code&amp;gt;'''--over'''&amp;lt;/code&amp;gt; option &amp;lt;code&amp;gt;'''1'''&amp;lt;/code&amp;gt; indicates that overwriting can only occur if the new file is larger than the file it replaces.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to build limited areas with higher resolution, for example airport areas, or particularly beautiful areas that we want to enhance.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;'''--over'''&amp;lt;/code&amp;gt; option has the following recognized parameters:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter!!Overwriting/deletion&lt;br /&gt;
|-&lt;br /&gt;
!--over 0&lt;br /&gt;
|Default option that inhibits any overwriting of images.&lt;br /&gt;
|-&lt;br /&gt;
!--over 1&lt;br /&gt;
|Overwrite only if the image to be replaced is larger than the present one&lt;br /&gt;
if the previous image is not present, the image will be inserted anyway.&lt;br /&gt;
|-&lt;br /&gt;
!--over 2&lt;br /&gt;
|Always overwrites, for example if you want to reduce the size of the images by a certain area.&lt;br /&gt;
|-&lt;br /&gt;
!--over 9&lt;br /&gt;
|Deletes the images present in the defined area.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Let's go to Fiumicino (Rome in Italy) by -i option===&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -s 4 -i fiumicino'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 125012.png|alt=|frameless|799x799px]]&lt;br /&gt;
&lt;br /&gt;
We are already familiar with these options&lt;br /&gt;
&lt;br /&gt;
The absence of '''&amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt;''' indicates that the image extraction radius is the default of 10 nm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; indicates a resolution of 8192 pixels long side&lt;br /&gt;
&lt;br /&gt;
But this is new&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-i fiumicino'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It means that we are selecting an airport containing the word '''fiumicino''&amp;lt;nowiki/&amp;gt;'. The search takes place in a database, with an Open Data license, which reports over 60,000 airports that have ICAO code.&lt;br /&gt;
&lt;br /&gt;
The database is distributed together with the ''photoscenary.jl'' program with the ''airports.csv'' file, which is easily editable, via a text editor. The ''airports.csv'' file is not actually the database used by the program, but only the data source which is automatically converted into the more practical ''airports.jdb'' file which is the database file used by the JuliaDB package.&lt;br /&gt;
&lt;br /&gt;
If you want to edit ''airports.csv'', once the file is saved, you will notice that the next time you run the ''photoscenary.jl'' program it will take a few seconds until a new ''airports.jdb'' is generated.&lt;br /&gt;
&lt;br /&gt;
The text inserted after the '''&amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;''' parameter can contain a single word or a sentence, but in this case it must be delimited by double quotes.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i &amp;quot;leonardo da vinci&amp;quot;&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Once the program has started, the system will respond by entering also with this output:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 213622.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
For example, if you enter as a name&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i rome&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The program will respond with the first 30 airports that correspond to the presence of the word Rome in one of the three search fields, as shown in this figure.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 215037-2.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In this case, just enter a unique selector, such as the ICAO ID, to obtain the searched airport, as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i LIRF&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Therefore, the search using the -i option can be extremely convenient, as it allows you to quickly have the coordinates of any airport present in the ICAO database.&lt;br /&gt;
&lt;br /&gt;
The search word can also be partial as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i zuric&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 220731.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
Any accented letters are normalized to the unaccented Latin form, for example:&lt;br /&gt;
&lt;br /&gt;
''Zürich Airport'' becomes ''Zurich Airport''&lt;br /&gt;
&lt;br /&gt;
and therefore the search can be successful if you write:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i &amp;quot;zurich airport&amp;quot;&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
=== Dynamically download orthographic images by --connect ===&lt;br /&gt;
It is very convenient to download the orthographic images of the territory actually flown over by the plane.&lt;br /&gt;
&lt;br /&gt;
In this case, the system will use the aircraft's course as reference, interspersed with points of radius -r.&lt;br /&gt;
&lt;br /&gt;
The program will then download only the images actually needed, thus minimizing the amount of data to download.&lt;br /&gt;
&lt;br /&gt;
The parameter to activate this function is this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--connect &amp;quot;&amp;lt;IP address&amp;gt;:&amp;lt;port&amp;gt;&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the program finds this parameter, checks if the syntax of the address is correct and listens showing a line that has as, first character and an arrow that rotates 45 degrees every second, followed by the sentence that begins with the text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''Try the frist connection to Flightgear with address: ...'''&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This delay can last for an indefinite time, until Flightgear is activated with, obviously, the Telnet connection port activated, as explained above.&lt;br /&gt;
&lt;br /&gt;
When Flightgear is activated, the program realizes it and starts evaluating the geographic position of the aircraft and then, if necessary, downloading and positioning the DDS images in the photorealistic scenario.&lt;br /&gt;
&lt;br /&gt;
If you close Flightgear again, the program will be put on hold again, a situation indicated by the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''Try connect to Flightgear with address: ...'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To exit the program it is necessary to type the key sequence: [CTRL] + [C]&lt;br /&gt;
&lt;br /&gt;
Exiting the program will have no effect on the downloaded DDS files as the program operates through transactional methods.&lt;br /&gt;
&lt;br /&gt;
==== A simple example ====&lt;br /&gt;
For example, you can run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the program will download the images in a radius of 10 nm for the entire length of the route. Thus forming a corridor of images that can give the illusion of a much larger territorial coverage than reality.&lt;br /&gt;
&lt;br /&gt;
The images, if the &amp;lt;code&amp;gt;-s n&amp;lt;/code&amp;gt; parameter is not specified, will have the size of 2048 px, this is a good enough size for flights above 10,000 ft. &lt;br /&gt;
&lt;br /&gt;
If the speed of the plane is not too high and the internet line is good, it may happen that the pilot can get a flight with complete coverage of the orthographic images, giving the illusion of having downloaded very large geographical areas and more a narrow corridor that follows the route followed by the plane ..&lt;br /&gt;
&lt;br /&gt;
If, on the other hand, the speed of the plane is high, or the speed of downloading the images is not high, it may be necessary, from time to time, to activate the option to update the scenario using the command:&lt;br /&gt;
&lt;br /&gt;
''[menu] -&amp;gt; [debug] -&amp;gt; [Reload Scenery]''&lt;br /&gt;
&lt;br /&gt;
In this case the simulator will freeze for a few seconds and then a scenario will be observed with orthographic images of the territory overflown.&lt;br /&gt;
&lt;br /&gt;
==== Preparation of Flightgear to allow you to communicate with the photoscenary.jl program ====&lt;br /&gt;
[[File:Julia photoscenery generator - launcher QT configuration - 20210618 232448.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
First you need to run Flightgear with the option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--telnet=5000'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command will activate the telnet server on Flightgear with port 5000 active. The port can be changed, but the important thing is that it is then the communication port entered in the &amp;lt;code&amp;gt;--connect&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
In the example in Additional Settings we see that the first line is the telnet server activation command, server needed to communicate with the photoscenary.jl program.&lt;br /&gt;
&lt;br /&gt;
In additional settings I have inserted two other options that may be useful:&lt;br /&gt;
&lt;br /&gt;
The parameter ''--httpd = 5001'' which activates an HTTP server, visible through the browser, useful for displaying the route on a geographic map. The third option instead activates multithreading which, eg run PC with at least 2 cores, allows you to render the flight more fluid.&lt;br /&gt;
&lt;br /&gt;
==== Performing dynamic loading of orthographic images during flight ====&lt;br /&gt;
First you need to start Flightgear (and with it the telnet server we configured previously), wait for its loading phase to finish. And then start the program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Julia photoscenery generator - execution connect param - 20210618.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Unlike the other methods of selecting the areas to be filled with images, this method can show an intermediate step called &amp;quot;System pending ...&amp;quot; which allows you to communicate to the pilot that the program is running smoothly, but has already downloaded all the images needed for the current flyover area and then waits to reach the next area from which it will start downloading images again.&lt;br /&gt;
&lt;br /&gt;
==== However, the other options are also allowed ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 3 --over 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;--connect&amp;lt;/code&amp;gt; command does not prevent the use of other options, such as image resolution and enabling overwriting if the new image is of a higher resolution than the one already present. &lt;br /&gt;
&lt;br /&gt;
===Follow a route generated with route manager by --route===&lt;br /&gt;
The FlightGear ''route manager'' program allows you to generate a route that passes through various points and/or airports, the route can be saved to a file that is placed in the Export folder of the FlightGear $FG Home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211312.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
In this example, a route has been generated made up of 6 points, of which the first and last are respectively the departure airport and the arrival airport.&lt;br /&gt;
&lt;br /&gt;
The route can be saved in a file which, in the example, has the name with a name ''LOWI-LIME.xml''&lt;br /&gt;
&lt;br /&gt;
The file is saved in the ''Export'' directory of the FGFS HOME directory.&lt;br /&gt;
&lt;br /&gt;
Being an XML file it is possible to open it through any text editor, and possibly also modify it, an operation, by the way, quite simple.&lt;br /&gt;
&lt;br /&gt;
Here's what the xml file used for our example looks like:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211351.png|frameless|929x929px]]&lt;br /&gt;
&lt;br /&gt;
The file can be as long as you like, however at the end it defines a path like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211204.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
Now that it has been clarified what a route is and how it is saved, let's see how it can be exploited to cover the photoscenary only for the parts near the route.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --route LOWI-LIME.xml -s 2 -r 10 --over 1 -d 0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
In this example, the saved route is taken over by the program that searches for it. This little magic is used to simplify the program execution command as it is assumed that the file is of XML type and contains specific tags. If these tags are not present, the file will be considered invalid. If, on the other hand, if the file is validated, then it becomes the basis for extracting the path.&lt;br /&gt;
&lt;br /&gt;
Once the file is validated, the program is executed, but first the project showing the single execution steps is shown.&lt;br /&gt;
&lt;br /&gt;
The step is indicated with its step number and a decimal representing the sub-step. Therefore a step that has zero decimal indicates that that step has been inserted in the route manager, while the others are steps built by the algorithm to give continuity to the coverage of the tiles.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210524 004027.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
It is noted that at the end of the project (part in red in the screen shown here) the download phase begins for each single step, which, in this example, are 21.&lt;br /&gt;
&lt;br /&gt;
Obviously the execution of the program can take a relatively long time, but certainly much less if that area had been covered with a single large set of tiles.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''that instead of entering the file name together with the path, only the file name can be entered, for example LIME-LIMJ.gpx somewhere, as long as it is inside the homepage or a subfolder. The program has an automatic search function which will find the file and use it as a route.''&lt;br /&gt;
&lt;br /&gt;
==== Skyvector format ====&lt;br /&gt;
Since version 0.3.9 the automatic conversion of files produced with [https://skyvector.com/ Skyvector] has been defined. The file in .gpx format is automatically converted to produce the equivalent route to the file produced by the FGFS route manager when supplied via the &amp;lt;code&amp;gt;--route&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
Skyvector is a very comprehensive route generator that is often used to plan routes in civil aviation. The use of this tool allows you to create route files in gpx format that can be read by the FGFS route manager and by this program. The conversion is transparent, that is, it is the program that parses the XML and determines its real format.&lt;br /&gt;
&lt;br /&gt;
===Let's go via the geographic coordinates by -o -a &amp;lt;code&amp;gt;'''--latll --lonll --latur --lonur option'''&amp;lt;/code&amp;gt;===&lt;br /&gt;
The coordinates are made explicit from the first line of the image:&lt;br /&gt;
&lt;br /&gt;
central point ''lat: 21.317454 lon: -157.91603'' radius: ''5.0''&lt;br /&gt;
&lt;br /&gt;
Not only that, but the second line reminds us in which area we are operating, that is an ideal rectangle with coordinates defined as follows:&lt;br /&gt;
&lt;br /&gt;
Lower left corner&lt;br /&gt;
&lt;br /&gt;
''latLL: 21,200 lonLL: -158,100''&lt;br /&gt;
&lt;br /&gt;
Upper right corner&lt;br /&gt;
&lt;br /&gt;
''latUR: 21.500 lonUR: -157.800''&lt;br /&gt;
&lt;br /&gt;
But we could have had the same result with the following parameters that explicitly define the center point:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 3 -a 21.317454 -o ''-''157.91603'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or with the parameters that define the lower left corner and the upper right corner&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -s 3 --latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.8'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entering the position values explicitly is a very convenient way when you do not know the acronym or name of an airport or want to select a particular area via google maps for example.&lt;br /&gt;
&lt;br /&gt;
{{tip|Google maps allows you to give the coordinates in the degrees and fractions of degrees format, used by this program and FlightGear, by simply clicking the right mouse button on the map. Alternatively use the FlightGear [https://scenery.flightgear.org/static/map/index.html scene models map], which has coordinates in decimal format and tile information.}}&lt;br /&gt;
&lt;br /&gt;
===The sea can be a problem --attemps option===&lt;br /&gt;
Now let's enlarge the radius area with &amp;lt;code&amp;gt;'''-r 20'''&amp;lt;/code&amp;gt; (20 NM) with lower resolution tiles, we use in this example &amp;lt;code&amp;gt;'''-s 2'''&amp;lt;/code&amp;gt; (2048 pixels long side)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl --attemps 0'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point we look at the output which points out a few things&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl top.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Meanwhile, let's see the effect of the &amp;lt;code&amp;gt;'''--over 0'''&amp;lt;/code&amp;gt; parameter which prevents smaller images from overwriting images already present, but let's also observe another fact:&lt;br /&gt;
&lt;br /&gt;
''The '''err''': column no longer reports the value 0 but numerical values ​​that go up 7..10 and then beyond. This means that some tiles have not been uploaded, not only that, but there is also a very high reduction in the download speed that reaches, barely 0.16 MB/sec.''&lt;br /&gt;
&lt;br /&gt;
The reason for this behavior is that around Honolulu there is the Pacific Ocean, or the sea, and the image server I am using does not show the sea beyond a certain distance from the coast. This means that the program tries to download a certain tile, but it returns an error, unfortunately not immediately, but only after a few seconds, the error starts a recovery procedure that performs the download attempt for two more times, if the third attempt fails, the system places the tiles, not downloaded, in a special list that can be retried in a subsequent cycle.&lt;br /&gt;
&lt;br /&gt;
Here is what we will have at the end of the download batch:&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl bottom.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Now let's see the incomplete file list that shows the tiles that have not been downloaded, the attempts parameter, in the ''Incomplete file list'', indicates the number of attempts made. By stating that the number of attempts is zero, it means that the program lists only the files that have resulted not downloaded and then exits the program. But if you enter a numeric value for the --attempt parameter instead, you can reprocess the tiles that have not been downloaded, but it is possible to change the number of attempts using the parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--attempts n'''&amp;lt;/code&amp;gt; (''default is '''2''''')&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;'''n'''&amp;lt;/code&amp;gt; is any integer. Do not increase this value too much, and only do it if the internet connection line is unstable or if the image server often drops the connection.&lt;br /&gt;
&lt;br /&gt;
Attempts to reconnect are quite slow, especially if the images are small, so it is better not to overdo it to avoid unnecessarily lengthening the download times.&lt;br /&gt;
&lt;br /&gt;
===Try to recover the errors --attemps n===&lt;br /&gt;
Often the errors are due to the presence of marine areas that are covered by maps with lower resolution, so the only way to obtain an error recovery is to lower the resolution.&lt;br /&gt;
&lt;br /&gt;
For this an algorithm has been inserted that in the first recovery step uses a width of '''1024''', width which is reduced to '''512,256,128''' etc ... for the following steps whose max number is defined by the value &amp;lt;code&amp;gt;'''--attempts n'''&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Let's try this download, always with the airport of Honolulu adding the possibility of making 3 attempts:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -s 2 -i Honolulu --attemps 3&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
[[File:Julia -t 10 photoscenary.jl -r 10 -s 2 -i Honolulu --attemps 3.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
At the end of the execution it is observed that 6 tiles have been inserted in the incomplete list, therefore it is possible, if the value of &amp;lt;code&amp;gt;'''--attemps'''&amp;lt;/code&amp;gt; is greater than 0 (''by default I remember that it is '''2'''''), to obtain a re-execution only for the tiles in error with a resolution request starting from 1024 pixels down.&lt;br /&gt;
&lt;br /&gt;
With the default value '''&amp;lt;code&amp;gt;--attemps 2&amp;lt;/code&amp;gt;''' it is hereby possible to arrive at tiles of 512 pixels which always seem to be released by the server, with --attempts 3 it is also possible to try tiles of 256 pixels the server does not yet release 512 pixels.&lt;br /&gt;
&lt;br /&gt;
The end result is complete coverage of the entire area. In two resolution groups, that of 2028 pixels proposed with '''&amp;lt;code&amp;gt;--s 2&amp;lt;/code&amp;gt;''' and that of 1024 pixels used by the recovery function.&lt;br /&gt;
&lt;br /&gt;
==Other options==&lt;br /&gt;
The program allows the use of other options that may be useful in certain circumstances, below I give a list with the relative possibilities of use.&lt;br /&gt;
&lt;br /&gt;
===--map '''''n'''''===&lt;br /&gt;
You can change the standard image server. Each image server is identified with a unique id which currently selects the following addresses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+List of servers currently active and inserted in the params.xml file&lt;br /&gt;
!Id&lt;br /&gt;
!Name&lt;br /&gt;
!Comment&lt;br /&gt;
! Address of the organization&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
|ESRI GIS&lt;br /&gt;
|Default, this servers is for all over the world&lt;br /&gt;
|[https://www.esri.com/en-us/about/about-esri/overview https://www.esri.com]&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
|USGS&lt;br /&gt;
|United States only. Public domain license, only US&lt;br /&gt;
|https://basemap.nationalmap.gov&lt;br /&gt;
|-&lt;br /&gt;
|'''3'''&lt;br /&gt;
|PNOA&lt;br /&gt;
| PNOA only Spain&lt;br /&gt;
|https://www.ign.es&lt;br /&gt;
|-&lt;br /&gt;
|'''4'''&lt;br /&gt;
|Geoportal&lt;br /&gt;
|geoportal.gov.pl only Poland&lt;br /&gt;
|https://www.geoportal.gov.pl&lt;br /&gt;
|}&lt;br /&gt;
[[File:Screenshot_20210524_205813.png|alt=|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
This option allows you to select a specific server different from the standard one (Id = 1). All servers are inserted into the ''params.xml'' file in the following form:&lt;br /&gt;
&lt;br /&gt;
Additional servers can be added simply by adding a new &amp;lt;server&amp;gt; ... &amp;lt;/server&amp;gt; entry within the general &amp;lt;servers&amp;gt; ... &amp;lt;/servers&amp;gt; entry. The Id must be unique, as it is the selector and can take any value. If someone adds their own server they can do it, but I recommend starting from a higher Id, for example 100, so as not to interfere with the Ids that could be added in the future.&lt;br /&gt;
&lt;br /&gt;
''An important recommendation '''is to replace''', in URLs, any &amp;quot;'''&amp;amp;'''&amp;quot; character with &amp;quot;'''|'''&amp;quot; (Pipe or vertical bar)''&lt;br /&gt;
&lt;br /&gt;
For example the URL:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;&amp;lt;url-command&amp;gt;SERVICE=WMS&amp;amp;VERSION=1.1.1&amp;amp;REQUEST=GetMap&amp;amp;LAYERS=OI ...&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
It should be written in the form:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;&amp;lt;url-command&amp;gt;SERVICE=WMS|VERSION=1.1.1|REQUEST=GetMap|LAYERS=OI ...&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
This is the characteristic output that occurs during program execution and shows the image server in use&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210524 205939.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
The selected server highlighted by the red line and shows the main data that allow it to be identified.&lt;br /&gt;
&lt;br /&gt;
Be very careful to use the right server for a certain area, the program does not know if the selected server is valid or not for a certain area, so a wrong server could delete the previously inserted image files.&lt;br /&gt;
&lt;br /&gt;
If you are unsure, check the server site or do a test limited to a certain area. The servers, when they are out of the area, do not give errors, but they release a completely white image, so always be very careful.&lt;br /&gt;
&lt;br /&gt;
===--path or -p ===&lt;br /&gt;
The program normally downloads image files in DDS or PNG format directly to the directory:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;''&amp;lt;home&amp;gt;''/fgfs-scenery/photoscenery/Orthophotos&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
However, sometimes a user wants to use a different destination, perhaps even a different mass storage unit, such as a NAS or a disk connected via USB, in these cases this option becomes very convenient.&lt;br /&gt;
&lt;br /&gt;
There are two ways to define a path:&lt;br /&gt;
&lt;br /&gt;
'''Path relative to the home directory ''('''''&amp;lt;nowiki/&amp;gt;''in the example the user is /home/abassign''')'''''&amp;lt;nowiki/&amp;gt;''':'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl -i pantelleria -r 20 -s 3 --attemps 2 -p scenary-dir&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The system will respond:&lt;br /&gt;
&lt;br /&gt;
The images path is: '''/home/abassign/scenary-dir/Orthophotos'''&lt;br /&gt;
&lt;br /&gt;
'''Absolute path:'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl -i pantelleria -r 20 -s 3 --attemps 2 -p /home/abassign/scenary-dir&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The path, in the case of using Windows, can be written in the Windows notation, for example:&lt;br /&gt;
&lt;br /&gt;
''c:\users\abassign\scenary-dir'' &lt;br /&gt;
&lt;br /&gt;
or in Linux:&lt;br /&gt;
&lt;br /&gt;
/home/abassign/scenary-dir&lt;br /&gt;
&lt;br /&gt;
==== Automatic path if the program is connected to FGFS ====&lt;br /&gt;
Since version 0.3.8 a method has been introduced that extracts the path directly from the FGFS program if it is connected (use the '''--connect''' param for the connection). The method is therefore implicit if the program is connected and the path is not defined, the path used will be the one described in the property tree of FGFS ''/sim/fg-scenery''. Obviously, if in the command line there is the --path parameter, the path reported by this has a higher priority.&lt;br /&gt;
&lt;br /&gt;
=== --save ===&lt;br /&gt;
The program '''always saves''' the images (''from version 0.3.8'') to a directory that can be implicit or explicitly defined with the '''--save &amp;quot;a path&amp;quot;''' parameter.&lt;br /&gt;
&lt;br /&gt;
There are therefore two cases:&lt;br /&gt;
&lt;br /&gt;
# If the '''--save''' parameter has a valid path, the program will save the images to be deleted on that path.&lt;br /&gt;
# If the save parameter is not present, the path is determined automatically by reading the path of insertion of the downloaded files by adding the sub-name '''''&amp;lt;path&amp;gt;-saved''''' to the path so as not to allow FGFS to use it as an operational directory.&lt;br /&gt;
&lt;br /&gt;
If you do not want to save the replaced images, you must explicitly enter the parameter '''--nosave''' as explained in the next paragraph.&lt;br /&gt;
&lt;br /&gt;
The path is always absolute, as it must be possible to manage external drives in which you want to insert the files to be saved.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to use an external disk, perhaps of a mechanical type of 1-4 TB, to save the files that have been downloaded by the program, all divided by size in pixels, as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;--save /media/abassign/save_2018/Salvataggi&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
You will get a configuration similar to this:&lt;br /&gt;
&lt;br /&gt;
[[File:Photoscenary julia save option example 01.png|frameless|740x740px]]&lt;br /&gt;
&lt;br /&gt;
As you can see, the images are grouped by size in pixels (s 0 &amp;lt;-&amp;gt; 512 ... s 4 &amp;lt;-&amp;gt; 8196 ... etc) and therefore the program, depending on the size of the image to be inserted, can choose the most appropriate image.&lt;br /&gt;
&lt;br /&gt;
It is interesting to try this configuration with -s 3 (4096 pix) which will load all the images from 4096 into the scenario directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you later want to have smaller images, for example le s 2 (2048 pix) or le s 1 from 1024 px just type this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 1 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''--over 2''' option is used to allow the replacement of larger images with smaller ones, as explained in the appropriate paragraph.&lt;br /&gt;
&lt;br /&gt;
The reorganization time of the images is very fast and is linked to the moving time of the images present in the system.&lt;br /&gt;
&lt;br /&gt;
Note that if the 4096 pix images were not saved yet, before replacing with the smaller images, they will be saved in the path indicated by --save.&lt;br /&gt;
&lt;br /&gt;
==== Summing up ====&lt;br /&gt;
With the --save option you can save the images that will be replaced when loading new images with different resolution. With this technique it is possible to save large areas of images on an external disk and finally, with this technique it is possible to change the resolution of the images without ever losing the downloaded images.&lt;br /&gt;
&lt;br /&gt;
=== --nosave ===&lt;br /&gt;
If we want to inhibit the autosave mode, just enter the '''--nosave''' parameter in the command line. With this parameter, saving of images that are deleted from the path is blocked.&lt;br /&gt;
&lt;br /&gt;
=== --png ===&lt;br /&gt;
It is a switch that allows you to download images in PNG format without switching to DDS images. This feature makes the downloaded images much larger (4 times) and easily viewable or editable by an image editing program such as GIMP or Imagemagick.&lt;br /&gt;
&lt;br /&gt;
If you subsequently start the program without the --png option, the program will try, before downloading the images from some external server, to check if the PNG images present are compatible with the DDS to be generated, if they are you will have the rapid conversion live PNG images in DDS.&lt;br /&gt;
&lt;br /&gt;
If the --save option has been activated, the PNG images will not be lost, but saved in the chosen path.&lt;br /&gt;
&lt;br /&gt;
=== --tile===&lt;br /&gt;
The world of Flightgear is represented with a tessellation of rectangles according to a rule defined at this link:&lt;br /&gt;
&lt;br /&gt;
https://wiki.flightgear.org/Tile_Index_Scheme&lt;br /&gt;
&lt;br /&gt;
The tile defines the minimum loadable area for a photo scenery, its size varies with latitude. Here is an example of how the tiles are distributed on the globe taken from a FGUK movie:{{#ev:youtube|YxWV4wk_dHw}}All the images that make up the photoscenery have a unique numerical name that is calculated through a special algorithm according to the latitude and longitude of the tile. This number is defined as the tile identifier.&lt;br /&gt;
&lt;br /&gt;
You can view the tile number in the FlightGear [https://scenery.flightgear.org/static/map/index.html scene models map] (lower left corner).&lt;br /&gt;
&lt;br /&gt;
For example if you run the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 1 --tile 3105266'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You point to a tile that belongs to the LIME airport area and is approximately equivalent to this command:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 5 -s 1 -l lime&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
In this way it is possible to select any area without having to enter particular coordinates, but only through this number.&lt;br /&gt;
&lt;br /&gt;
===--sexagesimal or -x===&lt;br /&gt;
The angular parameters '''--lon --lat --lonll --latll --lonur --latur''' are normally expressed as hexadecimal. But it often happens that you have the coordinates in ''sexagesimal'' degrees. If the option is inserted, the system converts the decimal part from ''sexagesimal'' to ''centesimal''. For example, if you enter the value of '''52.21''' ''sexagesimal'' degrees, the program will convert them to '''52° 21' N''' which will then be converted to '''52.35''' degree.&lt;br /&gt;
&lt;br /&gt;
'''Note''': ''It is not necessary to use the seconds as the tolerance of the tiles is 1/8 of a degree equal to about 7 minutes.''&lt;br /&gt;
&lt;br /&gt;
For example is possible to write:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -x -a 52.21 -o 13.30&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
which is equivalent to writing&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -x -a 52.35 -o 13.50&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
If the ''sexagesimal'' degrees are south or east, a minus sign must be entered, the field does not recognize the symbols N, S, E, W typically used in this type of notation.&lt;br /&gt;
&lt;br /&gt;
===--proxy===&lt;br /&gt;
Which allows you to connect with a proxy server, the parameter is used, for example, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 8 photoscenary.jl -s 5 -i &amp;quot;lowi&amp;quot; --over 1 -r 10 '''--proxy &amp;quot;&amp;lt;nowiki&amp;gt;http://192.168.0.9:8118&amp;lt;/nowiki&amp;gt;&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;quot;''&amp;lt;nowiki&amp;gt;http://192.168.0.9:8118&amp;lt;/nowiki&amp;gt;''&amp;quot; is the connection string to the proxy server.&lt;br /&gt;
&lt;br /&gt;
===--debug or -d===&lt;br /&gt;
Currently the program defines two levels of debugging:&lt;br /&gt;
&lt;br /&gt;
* level 1 &amp;lt;code&amp;gt;'''--debug 1'''&amp;lt;/code&amp;gt; adds a series of messages that are a function of the progress of the program, this can be useful when you suspect that the program is not downloading anything or that the network is really slow. The problem is that this option does not display the progress log well and therefore is only useful in special cases.&lt;br /&gt;
&lt;br /&gt;
*level 2 &amp;lt;code&amp;gt;'''--debug 2'''&amp;lt;/code&amp;gt; is also used to display any execution errors. If the system is properly configured they should be rare, but in some cases it is useful to be able to see them.&lt;br /&gt;
&lt;br /&gt;
=== --version===&lt;br /&gt;
It shows the program version and checks all the modules that need to be loaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl --version'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Photoscenary-version.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== --help or -h===&lt;br /&gt;
If you type the option -h or --help you get the complete list of options that can be recognized by the program, this list is obtained even if the option we enter or the value is not recognized, this is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;julia photoscenary.jl --help&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;The actiual Julia is 1.7.0-beta3.0 The current version is correct in order to obtain the best performances&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Photoscenary.jl ver: 0.3.5 date: Testing 20210816 System prerequisite test&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Photoscenery generator by Julia compilator,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Program for uploading Orthophotos files&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25 &amp;lt;nowiki&amp;gt;https://imagemagick.org&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Copyright: (C) 1999-2021 ImageMagick Studio LLC&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;License: &amp;lt;nowiki&amp;gt;https://imagemagick.org/script/license.php&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Features: Cipher DPC Modules OpenMP(4.5)  &amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;ImageMagic is operative!&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;usage: photoscenary.jl [--map MAP] [--latll LATLL] [--lonll LONLL]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--latur LATUR] [--lonur LONUR] [-a LAT]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [-o LON] [-x] [--png] [-i ICAO] [--route ROUTE]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [-t TILE] [-r RADIUS] [-s SIZE] [--sdwn SDWN]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--over OVER] [-p PATH] [--save SAVE]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--connect CONNECT] [--proxy PROXY]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--attemps ATTEMPS] [-d DEBUG] [--version] [-h]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;optional arguments:&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;-g, --args ARGS      The arguments files in txt format&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --map MAP            The map server id (type: Int64, default: 1)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --latll LATLL        Lower left area lat (type: Float64, default:  0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --lonll LONLL        Lower left area lon (type: Float64, default:  0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --latur LATUR        Upper right area lat (type: Float64, default: 0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --lonur LONUR        Upper right area lon (type: Float64, default: 0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -a, --lat LAT        Latitude in deg of central point (type: Float64, default: 45.66)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -o, --lon LON        Longitude in deg of central point (type: Float64, default: 9.7)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -x, --sexagesimal    Set the sexagesimal unit degree.minutes&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --png                Set the only png format files&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -i, --icao ICAO      ICAO airport code for extract LAT and LON&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --route ROUTE        Route XML for extract route LAT and LON&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -t, --tile TILE      Tile index es coordinate reference (type: Int64)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -r, --radius RADIUS  Distance Radius around the center point (nm) (type: Float64, default: 0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -s, --size SIZE      Max size of image 0-&amp;gt;512 1-&amp;gt;1024 2-&amp;gt;2048 3-&amp;gt;4096 4-&amp;gt;8192 5-&amp;gt;16384 6-&amp;gt;32768 (type: Int64, default: 2)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --sdwn SDWN          Down size with distance (type: Int64, default: 0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --over OVER          Overwrite the tiles: |1|only if bigger resolution |2|for all (type: Int64, default: 0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -p, --path PATH      Path to store the dds images (default: &amp;quot;fgfs-scenery/photoscenery&amp;quot;)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --save SAVE          Save the remove files in the specific path&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;--nosave             Not save the DDS/PNG files&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --connect CONNECT    IP and port FGFS program, example format: &amp;quot;127.0.0.1:5000&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --proxy PROXY        Proxy string ipv4:port for example: &amp;quot;192.168.0.1:8080&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --attemps ATTEMPS    Number of download attempts (type: Int64, default: 3)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -d, --debug DEBUG    Debug level (type: Int64, default: 0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --version            Program version&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -h, --help           show this help message and exit&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Management coverage of tiles on the territory ==&lt;br /&gt;
From version 0.2.8 a more articulated method of managing the loading and distribution of the tiles has been added.&lt;br /&gt;
&lt;br /&gt;
=== Unloading of tiles on the territory assigned with a spiral rule ===&lt;br /&gt;
An algorithm performs the sequence of downloading the tiles as a function of the distance from the center. The download starts from the tiles closest to the center up to the last tiles downloaded which will be the ones farthest from the center.&lt;br /&gt;
&lt;br /&gt;
In this motion it is possible to start the download procedure in parallel with the execution of the Flightgear program.&lt;br /&gt;
&lt;br /&gt;
If you leave the airport where the plane is initially located and use the same airport as the center point (--icao lime for example) during take-off we will already have the tiles of the take-off area and therefore the scenario will appear well covered with orthographic images. During the climb of the plane it will therefore be probable that the following images will always give the pilot the illusion that the territory is well covered with images, even if we are only one part of the work. It will be enough for the pilot, from time to time, to update the scenario with the appropriate Flightgear menu.&lt;br /&gt;
&lt;br /&gt;
=== Database of all orthographic images uploaded in .dds format. ===&lt;br /&gt;
This database is loaded at the beginning of the download session and contains all the images present in the home directory of the user who launched the program.&lt;br /&gt;
&lt;br /&gt;
Before downloading the image from the designated website, the program checks in the database if the requested image is already present in the database, if the image is found in any directory of the home, it is copied to the current path. In this way it is possible to avoid carrying out a download job when the image is already present. Obviously the image must have and the pixel size requirements compatible with those required.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to distribute the images also on external supports and then make them converge on a working directory, usually with faster access (for example the system SSD). The only constraint is that the external media has a link that links it to a local folder.&lt;br /&gt;
&lt;br /&gt;
With this technique it is also possible to exploit virtual folders that rely on other repositories, for example those shared with P2P techniques.&lt;br /&gt;
&lt;br /&gt;
This example shows a mixed image download with database support. Images ('''copied''') are images copied from other directories on your system, ('''inserted''') are images inserted after a download from the image distribution web server. The images ('''skip''') are those already present in the folder of the images we are creating.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210606 212142.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
== Saving arguments in a text file ==&lt;br /&gt;
[[File:Julia Photoscenery Generator - args file.png|thumb|400x400px|Example of the contents in the '''args.txt''' file]]&lt;br /&gt;
Often the number and length of the arguments can become difficult to manage and therefore it is convenient to be able to save them on a file. For this reason, the '''--args''' (or '''-g''') parameter was introduced followed by a filename to be used as an argument container.&lt;br /&gt;
&lt;br /&gt;
Let's take an example to better understand how this parameter works:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The arguments associated with the launch of the program are: &amp;lt;code&amp;gt;-i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we add the '''--args test.txt''' parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20 --args test.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the directory where we ran the program we will find a new file called test.txt which contains the list of the parameters just entered.&lt;br /&gt;
&lt;br /&gt;
It is now possible to recall the parameters entered using the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl test.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The test.txt file, first created, can be edited with a simple text file editor and then modified according to our needs.&lt;br /&gt;
&lt;br /&gt;
=== Arguments implicit saving ===&lt;br /&gt;
Launching the program with parameters, but without the '''--args''' option, still generates an arguments file called '''args.txt'''&lt;br /&gt;
&lt;br /&gt;
This file can be recalled for the next program run, simply by running the program with no arguments.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The args.txt file is generated and the program, if run without parameters, will search the args.txt file and load it again using the previous parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program runs exactly as in the previous execution.&lt;br /&gt;
&lt;br /&gt;
== Recipes to be able to try the program and live satisfied ==&lt;br /&gt;
There are quite typical configurations that can give a lot of satisfaction to those who want a photorealistic vision, here I give some examples that can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
==== The simplest ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will rerun with the last commands. The last commands are read from the file &amp;quot;args.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At the first run, this will establish a telnet session where photoscenery is downloaded on demand from your flightgear instance;&lt;br /&gt;
see [[Julia_photoscenery_generator#Dynamically_download_orthographic_images_by_--connect]].&lt;br /&gt;
&lt;br /&gt;
==== The scenario of the airport closest to you ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''If we live near Innsbruck LOWI is the closest airport.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''-i''' followed by the airport abbreviation ICAO, allows you to download that area for a radius of 20 nm ('''-r 20''') and resolution 8K pix ('''-s 4''')''&lt;br /&gt;
&lt;br /&gt;
==== A flight plan has been generated with Skyvector &amp;lt;nowiki&amp;gt;https://skyvector.com/&amp;lt;/nowiki&amp;gt; ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl -s 4 -r 20 --sdwn 1 --over 1 --route &amp;quot;LIMJ.gpx&amp;quot; --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''The area is processed along a route defined with '''[https://skyvector.com/ Skyvector]''' (but the same methodology also applies to the one defined with the FGFS route planner). The program parses the xml file inserted as a parameter of '''--route''' and determines the format.''&lt;br /&gt;
&lt;br /&gt;
==== The scenario is shown along the route ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -r 20 -s 3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''-t 10''' tells the compiler that it can use up to 10 CPUs, this speeds up the download speed by 2-5 times. '''--connect''' allows you to connect to the Flightgear program (obviously if remote control has been activated (with port 5000) with the launch option of FGFS --telnet = 5000. The parameter '''-s 3''' means that the images will be 4096 pix, a good resolution for flights above 3000 ft.''&lt;br /&gt;
&lt;br /&gt;
==== '''The images are saved for later reuse''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''--save''' shows the possibility to save the images also in an external drive, in this way it is possible to create collections of images even in the order of TB avoiding using the system disk space.&lt;br /&gt;
&lt;br /&gt;
'''--over 2''' It allows the replacement of images already present in the path directory, even if of higher resolution.&lt;br /&gt;
&lt;br /&gt;
'''The images are saved for later reuse and the operational image directory is defined by the path option.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 1 --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Generation of tiles along the route with maximum efficiency and quality ====&lt;br /&gt;
If you want to have a high quality scenario along the route, but at the same time light enough to allow the generation of images in good synchronization with the flight, you must enter the option '''--sdwn''' which, [[Julia photoscenery generator#The --sdwn parameter|as explained before]], allows you to automatically reduce the size of the tiles with the distance, in this way if the tile is distant a small tile is downloaded, if instead the tile is close, the downloaded tile is larger , at most the dimensions are those declared with the --s option. In this way it is possible to fly with a fairly synchronized scenario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 --over 1 --sdwn 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you want to get a faster loading of the images that are loaded along the route, remember that the program can overwrite the previous higher resolution images with lower resolution images '''without losing''' the images already downloaded, as they will be inserted in a area outside the scenario (for example a different disk) that can be reached with the path defined with the [[Julia photoscenery generator#--save|--save]] parameter.&lt;br /&gt;
&lt;br /&gt;
This option means that instead of overwriting the images, the program first saves the files, then downloads the images from some external server and then overwrites them. With this technique the overall loading of the images (tiles) is faster as it is useless to download large images of 4-8-16 K pixels placed in distant areas from the pilot's point of view.&lt;br /&gt;
&lt;br /&gt;
Therefore, to minimize the images it is necessary to communicate to the program that it will be able to overwrite the images with the option: [[Julia photoscenery generator#The --over parameter|--over 2]] But since the '''--save''' option is inserted, the program will not delete the previous images, but will insert them in the designated saving areas.&lt;br /&gt;
&lt;br /&gt;
At this point a good command can be this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; '''--save''' &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 '''--over 2''' '''--sdwn 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''However, it must always be remembered that currently FGFS does not reload the images of the scenario automatically, but you must click on the debug menu under reload scenario.''&lt;br /&gt;
&lt;br /&gt;
It is possible to avoid entering the --path and --save commands if you adopt the automatic path search method that is activated with --connect active. This makes the command simpler, but obviously you lose the ability to allocate unused images to a certain area on an explicit directory, this is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 '''--over 2''' '''--sdwn 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example of loading multiple scenarios ===&lt;br /&gt;
It is possible to use two sessions of photoscenary.jl at the same time to have an updated low resolution scenario (''obviously this method only makes sense if the route follows a path in which a tiles load has never been performed''). The first session will have a low resolution '''-s 1''' or '''-s 2''' while the second resolution could be much higher, e.g. '''-s 4''' or '''-s 5'''&lt;br /&gt;
&lt;br /&gt;
With this configuration it is very likely that the download speed of the orthophoto server you have selected is sufficient to show the images of the territory at low resolution (''remember that currently FGFS requires the manual scenario update if we want to see the scenario just written''), while the second program proceeds to download the images at a higher resolution which will then be visible only in a second flight, obviously on the same route (''it is very unlikely that from resolutions of '''-s 4''' onwards the images can be downloaded with the same speed with which you fly over the territory'').&lt;br /&gt;
&lt;br /&gt;
In this example I have given '''4 cores''' to the high resolution scenario, and '''3 cores''' to the lower resolution scenario. The number of cores cannot exceed the maximum allowed by your CPU, therefore the program, if this number exceeds the available one, automatically reduces the number of cores.&lt;br /&gt;
&lt;br /&gt;
The presence of the '''--over 1''' parameter is fundamental, which manages the insertion of images according to the resolution. However, remember that the low resolution images that will be replaced will not be deleted if you have entered the '''--save''' parameter with the relative save path.&lt;br /&gt;
&lt;br /&gt;
==== High resolution scenario tasks -s 4 (8K) and -r 10 ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia '''-t 4''' photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; '''-s 4 -r 10 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Low resolution scenario tasks -s 2 (2K) and -r 20 ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia '''-t 3''' photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; '''-s 2 -r 20 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the generated photo scenery in FlightGear==&lt;br /&gt;
1. Inform FG about additional directory with scenery tiles:&lt;br /&gt;
''--fg-scenery=/your/path/to/photoscenery/directory/''&lt;br /&gt;
either in command line or as extra options in launcher.&lt;br /&gt;
&lt;br /&gt;
E.g. if you have a directory structure like ''C:\FlightGear\fg_customscenery\photoscenery\Orthophotos\e000n40\e007n46'' then use ''--fg-scenery=C:\FlightGear\fg_customscenery\photoscenery''&lt;br /&gt;
&lt;br /&gt;
2. Check the option Menu &amp;gt; View &amp;gt; Rendering Options &amp;gt; Satellite Photoscenery.&lt;br /&gt;
&lt;br /&gt;
== Use the maps generated by photoscenary.jl for professional applications ==&lt;br /&gt;
The photoscenary.jl application allows you to generate maps even only in .png format useful to assemble with gimp (or other painting graphics programs) as the generation of the images guarantees the correct connection. Obviously, reference is made to cylindrical coordinates that must eventually be deformed in case you want to work with a different cartographic model. Currently the program defines the possibility of operating with some image sources defined in the parameter file '''params.xml''' in the sub-section ''&amp;lt;servers&amp;gt; ... &amp;lt;/servers&amp;gt;''. Those that offer the most permissive license conditions are produced by USGS (USA) which is an American federal enete and therefore does not bind which all maps with particular limitations of use, the same rules apply as the otographic images produced by NASA that are used in Flightgear for images of the Earth as seen from space.&lt;br /&gt;
&lt;br /&gt;
If one wants to read the terms of use, he can refer to what is reported in [https://www.usgs.gov/faqs/are-usgs-topographic-maps-copyrighted this USGS link].&lt;br /&gt;
&lt;br /&gt;
=== Download images for professional use or publications ===&lt;br /&gt;
This paragraph is based on the terms of use of the USGS server, so they may not apply to other servers reachable with this program. The server, as you can see by reading the USGS params.xml file, has '''id = 2'''. For use not related to flightgear it is normally useful to work with files in .png format as the .dds is used only for simulation or games. For technical applications a pair of coordinates is normally used which are: Upper right (UR) and Lower Left (LL) of the requested area. You can also find a set of images using polar coordinates and a radius in nautical miles.&lt;br /&gt;
&lt;br /&gt;
Let's now give one examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 6 photoscenary.jl -s 5 --latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.3 --map 2 &amp;lt;small&amp;gt;--png -p&amp;lt;/small&amp;gt;''' ''&amp;lt;small&amp;gt;'''&amp;quot;'''&amp;lt;/small&amp;gt;'''''&amp;lt;small&amp;gt;/some path/ortho&amp;quot;&amp;lt;/small&amp;gt;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The coordinates are defined in:&lt;br /&gt;
&lt;br /&gt;
'''-s 5''' is the resolution of the images (s 5 -&amp;gt; 16384 pix for tile)&lt;br /&gt;
&lt;br /&gt;
'''--latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.3'''&lt;br /&gt;
&lt;br /&gt;
Coordinates in six hundredth degrees.&lt;br /&gt;
&lt;br /&gt;
'''--map 2''' indicates that the images will be downloaded from the USGS server.&lt;br /&gt;
&lt;br /&gt;
'''--png''' means that the images WILL NOT BE CONVERTED to .dds but will remain in .png!&lt;br /&gt;
&lt;br /&gt;
'''-p &amp;quot;''&amp;lt;path&amp;gt;''&amp;quot;''' Defines the path where the images will be downloaded.&lt;br /&gt;
&lt;br /&gt;
'''-x''' If the coordinates are expressed in sexagesimal degrees, just enter this additional parameter, &lt;br /&gt;
&lt;br /&gt;
In this case the decimal part of the coordinate value is in prime, for example:&lt;br /&gt;
&lt;br /&gt;
'''--latll 21.50 --latll 158.50'''&lt;br /&gt;
&lt;br /&gt;
It is equivalent to writing:&lt;br /&gt;
&lt;br /&gt;
'''-x --latll 21.30 --lonll 158.30'''&lt;br /&gt;
&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Photoscenery]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021 - May 2021)&lt;br /&gt;
*{{forum link|t=38057|title=16k Photoscenery}} (September 2020 - Gen 2021)&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery]]&lt;br /&gt;
[[Category:Scenery software]]&lt;br /&gt;
[[Category:Photoscenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139666</id>
		<title>Photoscenery</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139666"/>
		<updated>2024-04-13T06:44:15Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Obtaining orthoimagery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Brest.jpg|thumb|270px|A [[Cessna 172P]] flying over 1 m/pixel photoscenery of Brest, France.]]&lt;br /&gt;
'''Photoscenery''' is [[scenery]] in which orthoimagery (aerial photographs) is placed over the terrain.&lt;br /&gt;
&lt;br /&gt;
== Why use photoscenery? ==&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Photoscenery shows the real world, it does not try to resemble it.&lt;br /&gt;
* Areas blend realistically, instead of a hard cut between urban and forest, or water and land for example.&lt;br /&gt;
* For VFR flight, more easy navigation in known locations because landmarks are more easily recognized&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* One needs large (or many) textures for high resolution scenery. For low level (VFR) flying, {{abbr|1 m/pixel|1 pixel spans 1 x 1 m}} is the absolute minimum.&lt;br /&gt;
* Orthoimagery is often hard to obtain, especially under an open license.&lt;br /&gt;
* The system running photoscenery has a higher memory (RAM) demand&lt;br /&gt;
&lt;br /&gt;
== Enabling photoscenery ==&lt;br /&gt;
Photoscenery can be enabled by navigating to the menubar: View, Rendering Options, and click on the Satellite Photoscenery checkbox.&lt;br /&gt;
&lt;br /&gt;
This will load Photoscenery from your normal Scenery folders (subfolder &amp;quot;Orthophotos/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Obtaining orthoimagery ==&lt;br /&gt;
* [http://www.usgs.gov/ USGS], provides {{abbr|3 m/pixel|1 pixel spans 3 x 3 m}} imagery for the entire United States of America, released in the public domain (and thus GNU GPL compatible).&lt;br /&gt;
&lt;br /&gt;
The prefered way of downloading these images depends on the used method Please read [[#Creating photoscenery|how to create photoscenery]], before starting.&lt;br /&gt;
&lt;br /&gt;
{{note|The most easy and quick way nowadays is to install [https://julialang.org/ Julia] and use the [[Julia photoscenery generator]].}}&lt;br /&gt;
&lt;br /&gt;
=== Preprocessing ===&lt;br /&gt;
* Since FlightGear adds haze to the scene, the textures should be &amp;quot;unhazed&amp;quot; to avoid double hazing.&lt;br /&gt;
* Shadows included in the images will conflict with shadows added by FlightGear. When creating small areas, shadows can be removed by hand from the textures, but this is usually undoable.&lt;br /&gt;
&lt;br /&gt;
== Creating photoscenery ==&lt;br /&gt;
There are several ways of creating photoscenery for [[FlightGear]], of which some are discussed here.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! [[#Texture overlays|Texture overlays]]&lt;br /&gt;
! [[#Texture materials|Texture materials]]&lt;br /&gt;
! [[#3D Model|3D Model]]&lt;br /&gt;
! [[Building FlightGear with osgEarth Integration|osgEarth]]&lt;br /&gt;
&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Supported by stable FlightGear release (requires no patching)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Toggle on run-time&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| With the current patch, the textures overlays are always loaded.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Water reflections, random buildings/trees&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Texture masks (not-so random objects)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no adapted scenery&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | High resolution&lt;br /&gt;
| {{no|ca. {{abbr|4m/pixel|1 pixel spans 4 x 4 m}}}}&lt;br /&gt;
| {{yes|{{abbr|1m/pixel|1 pixel spans 1 x 1 m}} or higher|colspan{{=}}&amp;quot;2&amp;quot;}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Advanced weather support&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no custom materials file&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture overlays ===&lt;br /&gt;
This method places the photo texture on top of the normal scenery. It requires [http://blaniel.free.fr/pub/flightgear/brest/ patches to be applied] to the FGData and SimGear sources.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds.&lt;br /&gt;
# Cut the orthoimagery to the bounds of the tile and save it with the name of the tile (for example &amp;lt;code&amp;gt;3023737.png&amp;lt;/code&amp;gt;). &lt;br /&gt;
#: A 4096 x 4096 pixel texture gives roughly a 4 m/pixel resolution. Most graphics cards cannot handle larger textures, so when distributing the scenery this can be considered to be the limit. Tests on various machines showed that 16384 x 16384 pixel textures are possible (1 m/pixel).&lt;br /&gt;
# Mirror the texture upside down.&lt;br /&gt;
# Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
#: It was found that 16384 x 16384 pixel textures can not be processed by nvcompress. The [http://code.google.com/p/gimp-dds/ DDS plugin for GIMP] worked fine though.&lt;br /&gt;
# Place this texture next to the respective &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file.&lt;br /&gt;
Simply launch FlightGear with [[$FG_SCENERY]] set to your scenery directory. Disable all shaders in the ''Main Menu'' &amp;amp;gt; ''View'' &amp;amp;gt; ''Rendering Options'' dialog. Model and Water can be enabled, but all other shaders will disable the photoscenery.&lt;br /&gt;
&lt;br /&gt;
{{note|Step 1 to 5 can be done by the photoscenery perl script from the {{sourceforge source|flightgear|fgscenery/tools|path=Photoscenery|text=FGScenery tools}}, when the imagery is obtained via a [http://en.wikipedia.org/wiki/Web_Map_Service Web Map Service] (WMS).}}&lt;br /&gt;
&lt;br /&gt;
=== Texture materials ===&lt;br /&gt;
Another approach is to add each photo texture as a &amp;quot;material&amp;quot; in the &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds with the python scripts from http://fgphotoscenery.square7.ch/#howto.&lt;br /&gt;
#: When creating low resolution scenery ({{abbr|4 m/pixel|1 pixel spans 4 x 4 m}} or lower), a single 4096 x 4096 pixel texture can cover one tile. Higher resolution scenery requires the tile to be cut into smaller pieces: we'll call those photo tiles.&lt;br /&gt;
# Repeat the following steps for each single photo tile.&lt;br /&gt;
## Mirror the texture upside down.&lt;br /&gt;
## Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
## Create a shapefile with the size/location of the texture. Save the shapefile with an unique name (for example &amp;lt;code&amp;gt;302373_3_2.shp&amp;lt;/code&amp;gt;, where the &amp;lt;code&amp;gt;3_2&amp;lt;/code&amp;gt; indicates the horizontal/vertical tile id. This is not needed when using just one texture per tile).&lt;br /&gt;
# Generate the scenery with [[TerraGear]], using the shapefiles as input.&lt;br /&gt;
# Currently TerraGear does not create good UV maps, so some manual steps are needed:&lt;br /&gt;
# Import (one of) the &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file(s) in [[Blender]] via the [[Blender and BTG]] plugin.&lt;br /&gt;
## Correct the uvmapping of each single sub-tile. The map should cover the texture exactly.&lt;br /&gt;
## Export the file again. Please note that you cannot re-import the file after exporting, so do not close Blender before verifying that the UV mapping is correct!&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file for your project. For example &amp;lt;code&amp;gt;[[$FG_ROOT]]/Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; for Dutch scenery.&lt;br /&gt;
# Add a material definition for each single sub-tile, like:&lt;br /&gt;
#: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;material&amp;gt;&amp;lt;name&amp;gt;3023745_1_1&amp;lt;/name&amp;gt;&amp;lt;texture&amp;gt;NL/3023745/3023745.1.1.dds&amp;lt;/texture&amp;gt;&amp;lt;/material&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#: The texture path is relative to &amp;lt;code&amp;gt;[[$FG_ROOT]]/Textures&amp;lt;/code&amp;gt;.&lt;br /&gt;
Now launch FlightGear with [[$FG_SCENERY]] set to the output directory of TerraGear and the command &amp;lt;code&amp;gt;--materials-file=Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; (for example).&lt;br /&gt;
&lt;br /&gt;
=== 3D Model ===&lt;br /&gt;
[[File:Prague 3D photoscenery.png|thumb|270px|Prague, using the 3D model method.]]&lt;br /&gt;
Instead of using the normal terrain, one could replace it by a big 3D model.&lt;br /&gt;
# Create a 3D model of the terrain and texturize it with the orthoimagery.&lt;br /&gt;
# Place the model as any other 3D object in the scenery.&lt;br /&gt;
# Remove the corresponding &amp;lt;code&amp;gt;Terrain/.../... .stg&amp;lt;/code&amp;gt; file to hide the normal scenery.&lt;br /&gt;
&lt;br /&gt;
== Extending the photoscenery support in FlightGear ==&lt;br /&gt;
{{Out of date|category=section}}&lt;br /&gt;
&lt;br /&gt;
For the earlier mentioned reasons, the texture overlay method seems to be the best and easiest for scenery developers. Nevertheless there are a few issues, stopping us from implementing it in the default FlightGear.&lt;br /&gt;
&lt;br /&gt;
* It unconditionally uses texture unit 3 in the terrain fragment shader, even if no photo-realistic texture has been found.&lt;br /&gt;
* It seems to blend the photo textures with the default material textures using the alpha value of the photo texture, but that is not documented anywhere. The purpose of this is unclear (why would you want to blend something photo realistic with a material texture in the first place).&lt;br /&gt;
* It currently does not enable clamping, resulting in black tile borders.&lt;br /&gt;
&lt;br /&gt;
Once there is basic support, a method should be found to split a single scenery tile into multiple texture tiles, so the resolution can be higher than 4 m/pixel.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Several example photoscenery projects. The text between brackets indicates what method is used.&lt;br /&gt;
* [[Brest]], France (texture materials)&lt;br /&gt;
* [http://helijah.free.fr/flightgear/scenes.html Paris and surroundings], France (texture overlay)&lt;br /&gt;
* [http://flightgear-cz.wz.cz/ Prague], Czech Republic (3D Model)&lt;br /&gt;
* Selected places of the [http://fgphotoscenery.square7.ch/ United States of America] (texture overlay)&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Julia photoscenery generator]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021-) Programs to generate and manipulate photoscenery for FGFS&lt;br /&gt;
* {{forum link|t=38057|title=16k Photoscenery}} (September 2020-)&lt;br /&gt;
* {{forum link|t=37866|title=Photoscenery?}} (August 2020-) Discussing a patch that simplifies adding photoscenery, that later was added to FlightGear&lt;br /&gt;
* {{forum link|p=201862|title=Re: DDS for textures Rotterdam}} (February 2014)&lt;br /&gt;
* {{forum link|t=22784|title=A project to create a source of free geo-referenced instrument charts}} (April 2014-June 2014)&lt;br /&gt;
&lt;br /&gt;
[[Category:Photoscenery]]&lt;br /&gt;
[[Category:Scenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139665</id>
		<title>Photoscenery</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139665"/>
		<updated>2024-04-13T06:35:12Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Enabling photoscenery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Brest.jpg|thumb|270px|A [[Cessna 172P]] flying over 1 m/pixel photoscenery of Brest, France.]]&lt;br /&gt;
'''Photoscenery''' is [[scenery]] in which orthoimagery (aerial photographs) is placed over the terrain.&lt;br /&gt;
&lt;br /&gt;
== Why use photoscenery? ==&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Photoscenery shows the real world, it does not try to resemble it.&lt;br /&gt;
* Areas blend realistically, instead of a hard cut between urban and forest, or water and land for example.&lt;br /&gt;
* For VFR flight, more easy navigation in known locations because landmarks are more easily recognized&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* One needs large (or many) textures for high resolution scenery. For low level (VFR) flying, {{abbr|1 m/pixel|1 pixel spans 1 x 1 m}} is the absolute minimum.&lt;br /&gt;
* Orthoimagery is often hard to obtain, especially under an open license.&lt;br /&gt;
* The system running photoscenery has a higher memory (RAM) demand&lt;br /&gt;
&lt;br /&gt;
== Enabling photoscenery ==&lt;br /&gt;
Photoscenery can be enabled by navigating to the menubar: View, Rendering Options, and click on the Satellite Photoscenery checkbox.&lt;br /&gt;
&lt;br /&gt;
This will load Photoscenery from your normal Scenery folders (subfolder &amp;quot;Orthophotos/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Obtaining orthoimagery ==&lt;br /&gt;
* [http://www.usgs.gov/ USGS], provides {{abbr|3 m/pixel|1 pixel spans 3 x 3 m}} imagery for the entire United States of America, released in the public domain (and thus GNU GPL compatible).&lt;br /&gt;
&lt;br /&gt;
The prefered way of downloading these images depends on the used method Please read [[#Creating photoscenery|how to create photoscenery]], before starting.&lt;br /&gt;
&lt;br /&gt;
=== Preprocessing ===&lt;br /&gt;
* Since FlightGear adds haze to the scene, the textures should be &amp;quot;unhazed&amp;quot; to avoid double hazing.&lt;br /&gt;
* Shadows included in the images will conflict with shadows added by FlightGear. When creating small areas, shadows can be removed by hand from the textures, but this is usually undoable.&lt;br /&gt;
&lt;br /&gt;
== Creating photoscenery ==&lt;br /&gt;
There are several ways of creating photoscenery for [[FlightGear]], of which some are discussed here.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! [[#Texture overlays|Texture overlays]]&lt;br /&gt;
! [[#Texture materials|Texture materials]]&lt;br /&gt;
! [[#3D Model|3D Model]]&lt;br /&gt;
! [[Building FlightGear with osgEarth Integration|osgEarth]]&lt;br /&gt;
&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Supported by stable FlightGear release (requires no patching)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Toggle on run-time&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| With the current patch, the textures overlays are always loaded.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Water reflections, random buildings/trees&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Texture masks (not-so random objects)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no adapted scenery&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | High resolution&lt;br /&gt;
| {{no|ca. {{abbr|4m/pixel|1 pixel spans 4 x 4 m}}}}&lt;br /&gt;
| {{yes|{{abbr|1m/pixel|1 pixel spans 1 x 1 m}} or higher|colspan{{=}}&amp;quot;2&amp;quot;}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Advanced weather support&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no custom materials file&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture overlays ===&lt;br /&gt;
This method places the photo texture on top of the normal scenery. It requires [http://blaniel.free.fr/pub/flightgear/brest/ patches to be applied] to the FGData and SimGear sources.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds.&lt;br /&gt;
# Cut the orthoimagery to the bounds of the tile and save it with the name of the tile (for example &amp;lt;code&amp;gt;3023737.png&amp;lt;/code&amp;gt;). &lt;br /&gt;
#: A 4096 x 4096 pixel texture gives roughly a 4 m/pixel resolution. Most graphics cards cannot handle larger textures, so when distributing the scenery this can be considered to be the limit. Tests on various machines showed that 16384 x 16384 pixel textures are possible (1 m/pixel).&lt;br /&gt;
# Mirror the texture upside down.&lt;br /&gt;
# Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
#: It was found that 16384 x 16384 pixel textures can not be processed by nvcompress. The [http://code.google.com/p/gimp-dds/ DDS plugin for GIMP] worked fine though.&lt;br /&gt;
# Place this texture next to the respective &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file.&lt;br /&gt;
Simply launch FlightGear with [[$FG_SCENERY]] set to your scenery directory. Disable all shaders in the ''Main Menu'' &amp;amp;gt; ''View'' &amp;amp;gt; ''Rendering Options'' dialog. Model and Water can be enabled, but all other shaders will disable the photoscenery.&lt;br /&gt;
&lt;br /&gt;
{{note|Step 1 to 5 can be done by the photoscenery perl script from the {{sourceforge source|flightgear|fgscenery/tools|path=Photoscenery|text=FGScenery tools}}, when the imagery is obtained via a [http://en.wikipedia.org/wiki/Web_Map_Service Web Map Service] (WMS).}}&lt;br /&gt;
&lt;br /&gt;
=== Texture materials ===&lt;br /&gt;
Another approach is to add each photo texture as a &amp;quot;material&amp;quot; in the &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds with the python scripts from http://fgphotoscenery.square7.ch/#howto.&lt;br /&gt;
#: When creating low resolution scenery ({{abbr|4 m/pixel|1 pixel spans 4 x 4 m}} or lower), a single 4096 x 4096 pixel texture can cover one tile. Higher resolution scenery requires the tile to be cut into smaller pieces: we'll call those photo tiles.&lt;br /&gt;
# Repeat the following steps for each single photo tile.&lt;br /&gt;
## Mirror the texture upside down.&lt;br /&gt;
## Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
## Create a shapefile with the size/location of the texture. Save the shapefile with an unique name (for example &amp;lt;code&amp;gt;302373_3_2.shp&amp;lt;/code&amp;gt;, where the &amp;lt;code&amp;gt;3_2&amp;lt;/code&amp;gt; indicates the horizontal/vertical tile id. This is not needed when using just one texture per tile).&lt;br /&gt;
# Generate the scenery with [[TerraGear]], using the shapefiles as input.&lt;br /&gt;
# Currently TerraGear does not create good UV maps, so some manual steps are needed:&lt;br /&gt;
# Import (one of) the &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file(s) in [[Blender]] via the [[Blender and BTG]] plugin.&lt;br /&gt;
## Correct the uvmapping of each single sub-tile. The map should cover the texture exactly.&lt;br /&gt;
## Export the file again. Please note that you cannot re-import the file after exporting, so do not close Blender before verifying that the UV mapping is correct!&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file for your project. For example &amp;lt;code&amp;gt;[[$FG_ROOT]]/Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; for Dutch scenery.&lt;br /&gt;
# Add a material definition for each single sub-tile, like:&lt;br /&gt;
#: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;material&amp;gt;&amp;lt;name&amp;gt;3023745_1_1&amp;lt;/name&amp;gt;&amp;lt;texture&amp;gt;NL/3023745/3023745.1.1.dds&amp;lt;/texture&amp;gt;&amp;lt;/material&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#: The texture path is relative to &amp;lt;code&amp;gt;[[$FG_ROOT]]/Textures&amp;lt;/code&amp;gt;.&lt;br /&gt;
Now launch FlightGear with [[$FG_SCENERY]] set to the output directory of TerraGear and the command &amp;lt;code&amp;gt;--materials-file=Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; (for example).&lt;br /&gt;
&lt;br /&gt;
=== 3D Model ===&lt;br /&gt;
[[File:Prague 3D photoscenery.png|thumb|270px|Prague, using the 3D model method.]]&lt;br /&gt;
Instead of using the normal terrain, one could replace it by a big 3D model.&lt;br /&gt;
# Create a 3D model of the terrain and texturize it with the orthoimagery.&lt;br /&gt;
# Place the model as any other 3D object in the scenery.&lt;br /&gt;
# Remove the corresponding &amp;lt;code&amp;gt;Terrain/.../... .stg&amp;lt;/code&amp;gt; file to hide the normal scenery.&lt;br /&gt;
&lt;br /&gt;
== Extending the photoscenery support in FlightGear ==&lt;br /&gt;
{{Out of date|category=section}}&lt;br /&gt;
&lt;br /&gt;
For the earlier mentioned reasons, the texture overlay method seems to be the best and easiest for scenery developers. Nevertheless there are a few issues, stopping us from implementing it in the default FlightGear.&lt;br /&gt;
&lt;br /&gt;
* It unconditionally uses texture unit 3 in the terrain fragment shader, even if no photo-realistic texture has been found.&lt;br /&gt;
* It seems to blend the photo textures with the default material textures using the alpha value of the photo texture, but that is not documented anywhere. The purpose of this is unclear (why would you want to blend something photo realistic with a material texture in the first place).&lt;br /&gt;
* It currently does not enable clamping, resulting in black tile borders.&lt;br /&gt;
&lt;br /&gt;
Once there is basic support, a method should be found to split a single scenery tile into multiple texture tiles, so the resolution can be higher than 4 m/pixel.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Several example photoscenery projects. The text between brackets indicates what method is used.&lt;br /&gt;
* [[Brest]], France (texture materials)&lt;br /&gt;
* [http://helijah.free.fr/flightgear/scenes.html Paris and surroundings], France (texture overlay)&lt;br /&gt;
* [http://flightgear-cz.wz.cz/ Prague], Czech Republic (3D Model)&lt;br /&gt;
* Selected places of the [http://fgphotoscenery.square7.ch/ United States of America] (texture overlay)&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Julia photoscenery generator]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021-) Programs to generate and manipulate photoscenery for FGFS&lt;br /&gt;
* {{forum link|t=38057|title=16k Photoscenery}} (September 2020-)&lt;br /&gt;
* {{forum link|t=37866|title=Photoscenery?}} (August 2020-) Discussing a patch that simplifies adding photoscenery, that later was added to FlightGear&lt;br /&gt;
* {{forum link|p=201862|title=Re: DDS for textures Rotterdam}} (February 2014)&lt;br /&gt;
* {{forum link|t=22784|title=A project to create a source of free geo-referenced instrument charts}} (April 2014-June 2014)&lt;br /&gt;
&lt;br /&gt;
[[Category:Photoscenery]]&lt;br /&gt;
[[Category:Scenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139664</id>
		<title>Photoscenery</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139664"/>
		<updated>2024-04-13T06:32:32Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Why use photoscenery? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Brest.jpg|thumb|270px|A [[Cessna 172P]] flying over 1 m/pixel photoscenery of Brest, France.]]&lt;br /&gt;
'''Photoscenery''' is [[scenery]] in which orthoimagery (aerial photographs) is placed over the terrain.&lt;br /&gt;
&lt;br /&gt;
== Why use photoscenery? ==&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Photoscenery shows the real world, it does not try to resemble it.&lt;br /&gt;
* Areas blend realistically, instead of a hard cut between urban and forest, or water and land for example.&lt;br /&gt;
* For VFR flight, more easy navigation in known locations because landmarks are more easily recognized&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* One needs large (or many) textures for high resolution scenery. For low level (VFR) flying, {{abbr|1 m/pixel|1 pixel spans 1 x 1 m}} is the absolute minimum.&lt;br /&gt;
* Orthoimagery is often hard to obtain, especially under an open license.&lt;br /&gt;
* The system running photoscenery has a higher memory (RAM) demand&lt;br /&gt;
&lt;br /&gt;
== Enabling photoscenery ==&lt;br /&gt;
Photoscenery can be enabled by navigating to the menubar: View, Rendering Options, and click on the Satellite Photoscenery checkbox.&lt;br /&gt;
&lt;br /&gt;
== Obtaining orthoimagery ==&lt;br /&gt;
* [http://www.usgs.gov/ USGS], provides {{abbr|3 m/pixel|1 pixel spans 3 x 3 m}} imagery for the entire United States of America, released in the public domain (and thus GNU GPL compatible).&lt;br /&gt;
&lt;br /&gt;
The prefered way of downloading these images depends on the used method Please read [[#Creating photoscenery|how to create photoscenery]], before starting.&lt;br /&gt;
&lt;br /&gt;
=== Preprocessing ===&lt;br /&gt;
* Since FlightGear adds haze to the scene, the textures should be &amp;quot;unhazed&amp;quot; to avoid double hazing.&lt;br /&gt;
* Shadows included in the images will conflict with shadows added by FlightGear. When creating small areas, shadows can be removed by hand from the textures, but this is usually undoable.&lt;br /&gt;
&lt;br /&gt;
== Creating photoscenery ==&lt;br /&gt;
There are several ways of creating photoscenery for [[FlightGear]], of which some are discussed here.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! [[#Texture overlays|Texture overlays]]&lt;br /&gt;
! [[#Texture materials|Texture materials]]&lt;br /&gt;
! [[#3D Model|3D Model]]&lt;br /&gt;
! [[Building FlightGear with osgEarth Integration|osgEarth]]&lt;br /&gt;
&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Supported by stable FlightGear release (requires no patching)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Toggle on run-time&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| With the current patch, the textures overlays are always loaded.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Water reflections, random buildings/trees&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Texture masks (not-so random objects)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no adapted scenery&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | High resolution&lt;br /&gt;
| {{no|ca. {{abbr|4m/pixel|1 pixel spans 4 x 4 m}}}}&lt;br /&gt;
| {{yes|{{abbr|1m/pixel|1 pixel spans 1 x 1 m}} or higher|colspan{{=}}&amp;quot;2&amp;quot;}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Advanced weather support&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no custom materials file&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture overlays ===&lt;br /&gt;
This method places the photo texture on top of the normal scenery. It requires [http://blaniel.free.fr/pub/flightgear/brest/ patches to be applied] to the FGData and SimGear sources.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds.&lt;br /&gt;
# Cut the orthoimagery to the bounds of the tile and save it with the name of the tile (for example &amp;lt;code&amp;gt;3023737.png&amp;lt;/code&amp;gt;). &lt;br /&gt;
#: A 4096 x 4096 pixel texture gives roughly a 4 m/pixel resolution. Most graphics cards cannot handle larger textures, so when distributing the scenery this can be considered to be the limit. Tests on various machines showed that 16384 x 16384 pixel textures are possible (1 m/pixel).&lt;br /&gt;
# Mirror the texture upside down.&lt;br /&gt;
# Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
#: It was found that 16384 x 16384 pixel textures can not be processed by nvcompress. The [http://code.google.com/p/gimp-dds/ DDS plugin for GIMP] worked fine though.&lt;br /&gt;
# Place this texture next to the respective &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file.&lt;br /&gt;
Simply launch FlightGear with [[$FG_SCENERY]] set to your scenery directory. Disable all shaders in the ''Main Menu'' &amp;amp;gt; ''View'' &amp;amp;gt; ''Rendering Options'' dialog. Model and Water can be enabled, but all other shaders will disable the photoscenery.&lt;br /&gt;
&lt;br /&gt;
{{note|Step 1 to 5 can be done by the photoscenery perl script from the {{sourceforge source|flightgear|fgscenery/tools|path=Photoscenery|text=FGScenery tools}}, when the imagery is obtained via a [http://en.wikipedia.org/wiki/Web_Map_Service Web Map Service] (WMS).}}&lt;br /&gt;
&lt;br /&gt;
=== Texture materials ===&lt;br /&gt;
Another approach is to add each photo texture as a &amp;quot;material&amp;quot; in the &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds with the python scripts from http://fgphotoscenery.square7.ch/#howto.&lt;br /&gt;
#: When creating low resolution scenery ({{abbr|4 m/pixel|1 pixel spans 4 x 4 m}} or lower), a single 4096 x 4096 pixel texture can cover one tile. Higher resolution scenery requires the tile to be cut into smaller pieces: we'll call those photo tiles.&lt;br /&gt;
# Repeat the following steps for each single photo tile.&lt;br /&gt;
## Mirror the texture upside down.&lt;br /&gt;
## Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
## Create a shapefile with the size/location of the texture. Save the shapefile with an unique name (for example &amp;lt;code&amp;gt;302373_3_2.shp&amp;lt;/code&amp;gt;, where the &amp;lt;code&amp;gt;3_2&amp;lt;/code&amp;gt; indicates the horizontal/vertical tile id. This is not needed when using just one texture per tile).&lt;br /&gt;
# Generate the scenery with [[TerraGear]], using the shapefiles as input.&lt;br /&gt;
# Currently TerraGear does not create good UV maps, so some manual steps are needed:&lt;br /&gt;
# Import (one of) the &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file(s) in [[Blender]] via the [[Blender and BTG]] plugin.&lt;br /&gt;
## Correct the uvmapping of each single sub-tile. The map should cover the texture exactly.&lt;br /&gt;
## Export the file again. Please note that you cannot re-import the file after exporting, so do not close Blender before verifying that the UV mapping is correct!&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file for your project. For example &amp;lt;code&amp;gt;[[$FG_ROOT]]/Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; for Dutch scenery.&lt;br /&gt;
# Add a material definition for each single sub-tile, like:&lt;br /&gt;
#: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;material&amp;gt;&amp;lt;name&amp;gt;3023745_1_1&amp;lt;/name&amp;gt;&amp;lt;texture&amp;gt;NL/3023745/3023745.1.1.dds&amp;lt;/texture&amp;gt;&amp;lt;/material&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#: The texture path is relative to &amp;lt;code&amp;gt;[[$FG_ROOT]]/Textures&amp;lt;/code&amp;gt;.&lt;br /&gt;
Now launch FlightGear with [[$FG_SCENERY]] set to the output directory of TerraGear and the command &amp;lt;code&amp;gt;--materials-file=Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; (for example).&lt;br /&gt;
&lt;br /&gt;
=== 3D Model ===&lt;br /&gt;
[[File:Prague 3D photoscenery.png|thumb|270px|Prague, using the 3D model method.]]&lt;br /&gt;
Instead of using the normal terrain, one could replace it by a big 3D model.&lt;br /&gt;
# Create a 3D model of the terrain and texturize it with the orthoimagery.&lt;br /&gt;
# Place the model as any other 3D object in the scenery.&lt;br /&gt;
# Remove the corresponding &amp;lt;code&amp;gt;Terrain/.../... .stg&amp;lt;/code&amp;gt; file to hide the normal scenery.&lt;br /&gt;
&lt;br /&gt;
== Extending the photoscenery support in FlightGear ==&lt;br /&gt;
{{Out of date|category=section}}&lt;br /&gt;
&lt;br /&gt;
For the earlier mentioned reasons, the texture overlay method seems to be the best and easiest for scenery developers. Nevertheless there are a few issues, stopping us from implementing it in the default FlightGear.&lt;br /&gt;
&lt;br /&gt;
* It unconditionally uses texture unit 3 in the terrain fragment shader, even if no photo-realistic texture has been found.&lt;br /&gt;
* It seems to blend the photo textures with the default material textures using the alpha value of the photo texture, but that is not documented anywhere. The purpose of this is unclear (why would you want to blend something photo realistic with a material texture in the first place).&lt;br /&gt;
* It currently does not enable clamping, resulting in black tile borders.&lt;br /&gt;
&lt;br /&gt;
Once there is basic support, a method should be found to split a single scenery tile into multiple texture tiles, so the resolution can be higher than 4 m/pixel.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Several example photoscenery projects. The text between brackets indicates what method is used.&lt;br /&gt;
* [[Brest]], France (texture materials)&lt;br /&gt;
* [http://helijah.free.fr/flightgear/scenes.html Paris and surroundings], France (texture overlay)&lt;br /&gt;
* [http://flightgear-cz.wz.cz/ Prague], Czech Republic (3D Model)&lt;br /&gt;
* Selected places of the [http://fgphotoscenery.square7.ch/ United States of America] (texture overlay)&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Julia photoscenery generator]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021-) Programs to generate and manipulate photoscenery for FGFS&lt;br /&gt;
* {{forum link|t=38057|title=16k Photoscenery}} (September 2020-)&lt;br /&gt;
* {{forum link|t=37866|title=Photoscenery?}} (August 2020-) Discussing a patch that simplifies adding photoscenery, that later was added to FlightGear&lt;br /&gt;
* {{forum link|p=201862|title=Re: DDS for textures Rotterdam}} (February 2014)&lt;br /&gt;
* {{forum link|t=22784|title=A project to create a source of free geo-referenced instrument charts}} (April 2014-June 2014)&lt;br /&gt;
&lt;br /&gt;
[[Category:Photoscenery]]&lt;br /&gt;
[[Category:Scenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139663</id>
		<title>Photoscenery</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139663"/>
		<updated>2024-04-13T06:31:49Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Why use photoscenery? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Brest.jpg|thumb|270px|A [[Cessna 172P]] flying over 1 m/pixel photoscenery of Brest, France.]]&lt;br /&gt;
'''Photoscenery''' is [[scenery]] in which orthoimagery (aerial photographs) is placed over the terrain.&lt;br /&gt;
&lt;br /&gt;
== Why use photoscenery? ==&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Photoscenery shows the real world, it does not try to resemble it.&lt;br /&gt;
* Areas blend realistically, instead of a hard cut between urban and forest, or water and land for example.&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* One needs large (or many) textures for high resolution scenery. For low level (VFR) flying, {{abbr|1 m/pixel|1 pixel spans 1 x 1 m}} is the absolute minimum.&lt;br /&gt;
* Orthoimagery is often hard to obtain, especially under an open license.&lt;br /&gt;
* The system running photoscenery has a higher memory (RAM) demand&lt;br /&gt;
&lt;br /&gt;
== Enabling photoscenery ==&lt;br /&gt;
Photoscenery can be enabled by navigating to the menubar: View, Rendering Options, and click on the Satellite Photoscenery checkbox.&lt;br /&gt;
&lt;br /&gt;
== Obtaining orthoimagery ==&lt;br /&gt;
* [http://www.usgs.gov/ USGS], provides {{abbr|3 m/pixel|1 pixel spans 3 x 3 m}} imagery for the entire United States of America, released in the public domain (and thus GNU GPL compatible).&lt;br /&gt;
&lt;br /&gt;
The prefered way of downloading these images depends on the used method Please read [[#Creating photoscenery|how to create photoscenery]], before starting.&lt;br /&gt;
&lt;br /&gt;
=== Preprocessing ===&lt;br /&gt;
* Since FlightGear adds haze to the scene, the textures should be &amp;quot;unhazed&amp;quot; to avoid double hazing.&lt;br /&gt;
* Shadows included in the images will conflict with shadows added by FlightGear. When creating small areas, shadows can be removed by hand from the textures, but this is usually undoable.&lt;br /&gt;
&lt;br /&gt;
== Creating photoscenery ==&lt;br /&gt;
There are several ways of creating photoscenery for [[FlightGear]], of which some are discussed here.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! [[#Texture overlays|Texture overlays]]&lt;br /&gt;
! [[#Texture materials|Texture materials]]&lt;br /&gt;
! [[#3D Model|3D Model]]&lt;br /&gt;
! [[Building FlightGear with osgEarth Integration|osgEarth]]&lt;br /&gt;
&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Supported by stable FlightGear release (requires no patching)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Toggle on run-time&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| With the current patch, the textures overlays are always loaded.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Water reflections, random buildings/trees&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Texture masks (not-so random objects)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no adapted scenery&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | High resolution&lt;br /&gt;
| {{no|ca. {{abbr|4m/pixel|1 pixel spans 4 x 4 m}}}}&lt;br /&gt;
| {{yes|{{abbr|1m/pixel|1 pixel spans 1 x 1 m}} or higher|colspan{{=}}&amp;quot;2&amp;quot;}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Advanced weather support&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no custom materials file&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture overlays ===&lt;br /&gt;
This method places the photo texture on top of the normal scenery. It requires [http://blaniel.free.fr/pub/flightgear/brest/ patches to be applied] to the FGData and SimGear sources.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds.&lt;br /&gt;
# Cut the orthoimagery to the bounds of the tile and save it with the name of the tile (for example &amp;lt;code&amp;gt;3023737.png&amp;lt;/code&amp;gt;). &lt;br /&gt;
#: A 4096 x 4096 pixel texture gives roughly a 4 m/pixel resolution. Most graphics cards cannot handle larger textures, so when distributing the scenery this can be considered to be the limit. Tests on various machines showed that 16384 x 16384 pixel textures are possible (1 m/pixel).&lt;br /&gt;
# Mirror the texture upside down.&lt;br /&gt;
# Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
#: It was found that 16384 x 16384 pixel textures can not be processed by nvcompress. The [http://code.google.com/p/gimp-dds/ DDS plugin for GIMP] worked fine though.&lt;br /&gt;
# Place this texture next to the respective &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file.&lt;br /&gt;
Simply launch FlightGear with [[$FG_SCENERY]] set to your scenery directory. Disable all shaders in the ''Main Menu'' &amp;amp;gt; ''View'' &amp;amp;gt; ''Rendering Options'' dialog. Model and Water can be enabled, but all other shaders will disable the photoscenery.&lt;br /&gt;
&lt;br /&gt;
{{note|Step 1 to 5 can be done by the photoscenery perl script from the {{sourceforge source|flightgear|fgscenery/tools|path=Photoscenery|text=FGScenery tools}}, when the imagery is obtained via a [http://en.wikipedia.org/wiki/Web_Map_Service Web Map Service] (WMS).}}&lt;br /&gt;
&lt;br /&gt;
=== Texture materials ===&lt;br /&gt;
Another approach is to add each photo texture as a &amp;quot;material&amp;quot; in the &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds with the python scripts from http://fgphotoscenery.square7.ch/#howto.&lt;br /&gt;
#: When creating low resolution scenery ({{abbr|4 m/pixel|1 pixel spans 4 x 4 m}} or lower), a single 4096 x 4096 pixel texture can cover one tile. Higher resolution scenery requires the tile to be cut into smaller pieces: we'll call those photo tiles.&lt;br /&gt;
# Repeat the following steps for each single photo tile.&lt;br /&gt;
## Mirror the texture upside down.&lt;br /&gt;
## Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
## Create a shapefile with the size/location of the texture. Save the shapefile with an unique name (for example &amp;lt;code&amp;gt;302373_3_2.shp&amp;lt;/code&amp;gt;, where the &amp;lt;code&amp;gt;3_2&amp;lt;/code&amp;gt; indicates the horizontal/vertical tile id. This is not needed when using just one texture per tile).&lt;br /&gt;
# Generate the scenery with [[TerraGear]], using the shapefiles as input.&lt;br /&gt;
# Currently TerraGear does not create good UV maps, so some manual steps are needed:&lt;br /&gt;
# Import (one of) the &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file(s) in [[Blender]] via the [[Blender and BTG]] plugin.&lt;br /&gt;
## Correct the uvmapping of each single sub-tile. The map should cover the texture exactly.&lt;br /&gt;
## Export the file again. Please note that you cannot re-import the file after exporting, so do not close Blender before verifying that the UV mapping is correct!&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file for your project. For example &amp;lt;code&amp;gt;[[$FG_ROOT]]/Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; for Dutch scenery.&lt;br /&gt;
# Add a material definition for each single sub-tile, like:&lt;br /&gt;
#: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;material&amp;gt;&amp;lt;name&amp;gt;3023745_1_1&amp;lt;/name&amp;gt;&amp;lt;texture&amp;gt;NL/3023745/3023745.1.1.dds&amp;lt;/texture&amp;gt;&amp;lt;/material&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#: The texture path is relative to &amp;lt;code&amp;gt;[[$FG_ROOT]]/Textures&amp;lt;/code&amp;gt;.&lt;br /&gt;
Now launch FlightGear with [[$FG_SCENERY]] set to the output directory of TerraGear and the command &amp;lt;code&amp;gt;--materials-file=Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; (for example).&lt;br /&gt;
&lt;br /&gt;
=== 3D Model ===&lt;br /&gt;
[[File:Prague 3D photoscenery.png|thumb|270px|Prague, using the 3D model method.]]&lt;br /&gt;
Instead of using the normal terrain, one could replace it by a big 3D model.&lt;br /&gt;
# Create a 3D model of the terrain and texturize it with the orthoimagery.&lt;br /&gt;
# Place the model as any other 3D object in the scenery.&lt;br /&gt;
# Remove the corresponding &amp;lt;code&amp;gt;Terrain/.../... .stg&amp;lt;/code&amp;gt; file to hide the normal scenery.&lt;br /&gt;
&lt;br /&gt;
== Extending the photoscenery support in FlightGear ==&lt;br /&gt;
{{Out of date|category=section}}&lt;br /&gt;
&lt;br /&gt;
For the earlier mentioned reasons, the texture overlay method seems to be the best and easiest for scenery developers. Nevertheless there are a few issues, stopping us from implementing it in the default FlightGear.&lt;br /&gt;
&lt;br /&gt;
* It unconditionally uses texture unit 3 in the terrain fragment shader, even if no photo-realistic texture has been found.&lt;br /&gt;
* It seems to blend the photo textures with the default material textures using the alpha value of the photo texture, but that is not documented anywhere. The purpose of this is unclear (why would you want to blend something photo realistic with a material texture in the first place).&lt;br /&gt;
* It currently does not enable clamping, resulting in black tile borders.&lt;br /&gt;
&lt;br /&gt;
Once there is basic support, a method should be found to split a single scenery tile into multiple texture tiles, so the resolution can be higher than 4 m/pixel.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Several example photoscenery projects. The text between brackets indicates what method is used.&lt;br /&gt;
* [[Brest]], France (texture materials)&lt;br /&gt;
* [http://helijah.free.fr/flightgear/scenes.html Paris and surroundings], France (texture overlay)&lt;br /&gt;
* [http://flightgear-cz.wz.cz/ Prague], Czech Republic (3D Model)&lt;br /&gt;
* Selected places of the [http://fgphotoscenery.square7.ch/ United States of America] (texture overlay)&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Julia photoscenery generator]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021-) Programs to generate and manipulate photoscenery for FGFS&lt;br /&gt;
* {{forum link|t=38057|title=16k Photoscenery}} (September 2020-)&lt;br /&gt;
* {{forum link|t=37866|title=Photoscenery?}} (August 2020-) Discussing a patch that simplifies adding photoscenery, that later was added to FlightGear&lt;br /&gt;
* {{forum link|p=201862|title=Re: DDS for textures Rotterdam}} (February 2014)&lt;br /&gt;
* {{forum link|t=22784|title=A project to create a source of free geo-referenced instrument charts}} (April 2014-June 2014)&lt;br /&gt;
&lt;br /&gt;
[[Category:Photoscenery]]&lt;br /&gt;
[[Category:Scenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139662</id>
		<title>Photoscenery</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Photoscenery&amp;diff=139662"/>
		<updated>2024-04-13T06:30:39Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Brest.jpg|thumb|270px|A [[Cessna 172P]] flying over 1 m/pixel photoscenery of Brest, France.]]&lt;br /&gt;
'''Photoscenery''' is [[scenery]] in which orthoimagery (aerial photographs) is placed over the terrain.&lt;br /&gt;
&lt;br /&gt;
== Why use photoscenery? ==&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Photoscenery shows the real world, it does not try to resemble it.&lt;br /&gt;
* Areas blend realistically, instead of a hard cut between urban and forest, or water and land for example.&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* One needs large (or many) textures for high resolution scenery. For low level (VFR) flying, {{abbr|1 m/pixel|1 pixel spans 1 x 1 m}} is the absolute minimum.&lt;br /&gt;
* Orthoimagery is often hard to obtain, especially under an open license.&lt;br /&gt;
&lt;br /&gt;
== Enabling photoscenery ==&lt;br /&gt;
Photoscenery can be enabled by navigating to the menubar: View, Rendering Options, and click on the Satellite Photoscenery checkbox.&lt;br /&gt;
&lt;br /&gt;
== Obtaining orthoimagery ==&lt;br /&gt;
* [http://www.usgs.gov/ USGS], provides {{abbr|3 m/pixel|1 pixel spans 3 x 3 m}} imagery for the entire United States of America, released in the public domain (and thus GNU GPL compatible).&lt;br /&gt;
&lt;br /&gt;
The prefered way of downloading these images depends on the used method Please read [[#Creating photoscenery|how to create photoscenery]], before starting.&lt;br /&gt;
&lt;br /&gt;
=== Preprocessing ===&lt;br /&gt;
* Since FlightGear adds haze to the scene, the textures should be &amp;quot;unhazed&amp;quot; to avoid double hazing.&lt;br /&gt;
* Shadows included in the images will conflict with shadows added by FlightGear. When creating small areas, shadows can be removed by hand from the textures, but this is usually undoable.&lt;br /&gt;
&lt;br /&gt;
== Creating photoscenery ==&lt;br /&gt;
There are several ways of creating photoscenery for [[FlightGear]], of which some are discussed here.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! [[#Texture overlays|Texture overlays]]&lt;br /&gt;
! [[#Texture materials|Texture materials]]&lt;br /&gt;
! [[#3D Model|3D Model]]&lt;br /&gt;
! [[Building FlightGear with osgEarth Integration|osgEarth]]&lt;br /&gt;
&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Supported by stable FlightGear release (requires no patching)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Toggle on run-time&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| With the current patch, the textures overlays are always loaded.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Water reflections, random buildings/trees&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Texture masks (not-so random objects)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no adapted scenery&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | High resolution&lt;br /&gt;
| {{no|ca. {{abbr|4m/pixel|1 pixel spans 4 x 4 m}}}}&lt;br /&gt;
| {{yes|{{abbr|1m/pixel|1 pixel spans 1 x 1 m}} or higher|colspan{{=}}&amp;quot;2&amp;quot;}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Advanced weather support&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| Depends on accuracy of underlying terrain (shapefiles)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot; | Requires no custom materials file&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Texture overlays ===&lt;br /&gt;
This method places the photo texture on top of the normal scenery. It requires [http://blaniel.free.fr/pub/flightgear/brest/ patches to be applied] to the FGData and SimGear sources.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds.&lt;br /&gt;
# Cut the orthoimagery to the bounds of the tile and save it with the name of the tile (for example &amp;lt;code&amp;gt;3023737.png&amp;lt;/code&amp;gt;). &lt;br /&gt;
#: A 4096 x 4096 pixel texture gives roughly a 4 m/pixel resolution. Most graphics cards cannot handle larger textures, so when distributing the scenery this can be considered to be the limit. Tests on various machines showed that 16384 x 16384 pixel textures are possible (1 m/pixel).&lt;br /&gt;
# Mirror the texture upside down.&lt;br /&gt;
# Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
#: It was found that 16384 x 16384 pixel textures can not be processed by nvcompress. The [http://code.google.com/p/gimp-dds/ DDS plugin for GIMP] worked fine though.&lt;br /&gt;
# Place this texture next to the respective &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file.&lt;br /&gt;
Simply launch FlightGear with [[$FG_SCENERY]] set to your scenery directory. Disable all shaders in the ''Main Menu'' &amp;amp;gt; ''View'' &amp;amp;gt; ''Rendering Options'' dialog. Model and Water can be enabled, but all other shaders will disable the photoscenery.&lt;br /&gt;
&lt;br /&gt;
{{note|Step 1 to 5 can be done by the photoscenery perl script from the {{sourceforge source|flightgear|fgscenery/tools|path=Photoscenery|text=FGScenery tools}}, when the imagery is obtained via a [http://en.wikipedia.org/wiki/Web_Map_Service Web Map Service] (WMS).}}&lt;br /&gt;
&lt;br /&gt;
=== Texture materials ===&lt;br /&gt;
Another approach is to add each photo texture as a &amp;quot;material&amp;quot; in the &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
# Calculate the tile bounds with the python scripts from http://fgphotoscenery.square7.ch/#howto.&lt;br /&gt;
#: When creating low resolution scenery ({{abbr|4 m/pixel|1 pixel spans 4 x 4 m}} or lower), a single 4096 x 4096 pixel texture can cover one tile. Higher resolution scenery requires the tile to be cut into smaller pieces: we'll call those photo tiles.&lt;br /&gt;
# Repeat the following steps for each single photo tile.&lt;br /&gt;
## Mirror the texture upside down.&lt;br /&gt;
## Convert the texture to &amp;lt;code&amp;gt;.dds&amp;lt;/code&amp;gt; via NVidia's nvcompress (part of the [http://developer.nvidia.com/legacy-texture-tools NVidia Tools]).&lt;br /&gt;
## Create a shapefile with the size/location of the texture. Save the shapefile with an unique name (for example &amp;lt;code&amp;gt;302373_3_2.shp&amp;lt;/code&amp;gt;, where the &amp;lt;code&amp;gt;3_2&amp;lt;/code&amp;gt; indicates the horizontal/vertical tile id. This is not needed when using just one texture per tile).&lt;br /&gt;
# Generate the scenery with [[TerraGear]], using the shapefiles as input.&lt;br /&gt;
# Currently TerraGear does not create good UV maps, so some manual steps are needed:&lt;br /&gt;
# Import (one of) the &amp;lt;code&amp;gt;.btg.gz&amp;lt;/code&amp;gt; file(s) in [[Blender]] via the [[Blender and BTG]] plugin.&lt;br /&gt;
## Correct the uvmapping of each single sub-tile. The map should cover the texture exactly.&lt;br /&gt;
## Export the file again. Please note that you cannot re-import the file after exporting, so do not close Blender before verifying that the UV mapping is correct!&lt;br /&gt;
# Create a &amp;lt;code&amp;gt;materials.xml&amp;lt;/code&amp;gt; file for your project. For example &amp;lt;code&amp;gt;[[$FG_ROOT]]/Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; for Dutch scenery.&lt;br /&gt;
# Add a material definition for each single sub-tile, like:&lt;br /&gt;
#: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;material&amp;gt;&amp;lt;name&amp;gt;3023745_1_1&amp;lt;/name&amp;gt;&amp;lt;texture&amp;gt;NL/3023745/3023745.1.1.dds&amp;lt;/texture&amp;gt;&amp;lt;/material&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
#: The texture path is relative to &amp;lt;code&amp;gt;[[$FG_ROOT]]/Textures&amp;lt;/code&amp;gt;.&lt;br /&gt;
Now launch FlightGear with [[$FG_SCENERY]] set to the output directory of TerraGear and the command &amp;lt;code&amp;gt;--materials-file=Photoscenery/materials-nl.xml&amp;lt;/code&amp;gt; (for example).&lt;br /&gt;
&lt;br /&gt;
=== 3D Model ===&lt;br /&gt;
[[File:Prague 3D photoscenery.png|thumb|270px|Prague, using the 3D model method.]]&lt;br /&gt;
Instead of using the normal terrain, one could replace it by a big 3D model.&lt;br /&gt;
# Create a 3D model of the terrain and texturize it with the orthoimagery.&lt;br /&gt;
# Place the model as any other 3D object in the scenery.&lt;br /&gt;
# Remove the corresponding &amp;lt;code&amp;gt;Terrain/.../... .stg&amp;lt;/code&amp;gt; file to hide the normal scenery.&lt;br /&gt;
&lt;br /&gt;
== Extending the photoscenery support in FlightGear ==&lt;br /&gt;
{{Out of date|category=section}}&lt;br /&gt;
&lt;br /&gt;
For the earlier mentioned reasons, the texture overlay method seems to be the best and easiest for scenery developers. Nevertheless there are a few issues, stopping us from implementing it in the default FlightGear.&lt;br /&gt;
&lt;br /&gt;
* It unconditionally uses texture unit 3 in the terrain fragment shader, even if no photo-realistic texture has been found.&lt;br /&gt;
* It seems to blend the photo textures with the default material textures using the alpha value of the photo texture, but that is not documented anywhere. The purpose of this is unclear (why would you want to blend something photo realistic with a material texture in the first place).&lt;br /&gt;
* It currently does not enable clamping, resulting in black tile borders.&lt;br /&gt;
&lt;br /&gt;
Once there is basic support, a method should be found to split a single scenery tile into multiple texture tiles, so the resolution can be higher than 4 m/pixel.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Several example photoscenery projects. The text between brackets indicates what method is used.&lt;br /&gt;
* [[Brest]], France (texture materials)&lt;br /&gt;
* [http://helijah.free.fr/flightgear/scenes.html Paris and surroundings], France (texture overlay)&lt;br /&gt;
* [http://flightgear-cz.wz.cz/ Prague], Czech Republic (3D Model)&lt;br /&gt;
* Selected places of the [http://fgphotoscenery.square7.ch/ United States of America] (texture overlay)&lt;br /&gt;
&lt;br /&gt;
== Related content ==&lt;br /&gt;
=== Wiki articles ===&lt;br /&gt;
* [[Julia photoscenery generator]]&lt;br /&gt;
&lt;br /&gt;
=== Forum topics ===&lt;br /&gt;
* {{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021-) Programs to generate and manipulate photoscenery for FGFS&lt;br /&gt;
* {{forum link|t=38057|title=16k Photoscenery}} (September 2020-)&lt;br /&gt;
* {{forum link|t=37866|title=Photoscenery?}} (August 2020-) Discussing a patch that simplifies adding photoscenery, that later was added to FlightGear&lt;br /&gt;
* {{forum link|p=201862|title=Re: DDS for textures Rotterdam}} (February 2014)&lt;br /&gt;
* {{forum link|t=22784|title=A project to create a source of free geo-referenced instrument charts}} (April 2014-June 2014)&lt;br /&gt;
&lt;br /&gt;
[[Category:Photoscenery]]&lt;br /&gt;
[[Category:Scenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Julia_photoscenery_generator&amp;diff=139661</id>
		<title>Julia photoscenery generator</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Julia_photoscenery_generator&amp;diff=139661"/>
		<updated>2024-04-13T06:29:51Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: Added proper software filehandler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
|title               = FGCom-mumble&lt;br /&gt;
|logo                = G91R1B taking off from LOWI .jpg|128px&lt;br /&gt;
|developedby         = Adriano Bassignana&lt;br /&gt;
|developmentstatus   = Active&lt;br /&gt;
|type                = Photoscenery generator&lt;br /&gt;
|latestrelease       = (rolling releases)&lt;br /&gt;
|initialrelease      = 18.04.2021&lt;br /&gt;
|writtenin           = julia&lt;br /&gt;
|os                  = Windows, GNU/Linux, MacOS&lt;br /&gt;
|license             = [[GNU General Public License]] v2&lt;br /&gt;
|website             = https://github.com/abassign/Photoscenary&lt;br /&gt;
}}&lt;br /&gt;
[[File:G91R1B taking off from LOWI .jpg|thumb|500px|Photoscenery created with the Julia photoscenery generator behind a [[FIAT G91R1B|G91R1B]] taking off from LOWI. In this example the resolution of the tiles is 32K (s 6).]]&lt;br /&gt;
&lt;br /&gt;
Through the '''Julia photoscenery generator''' using ImageMagic and written in the Julia programming language you can create photoscenery tiles.&lt;br /&gt;
&lt;br /&gt;
Once you have everything installed you will discover how easy it is to fill your disk with hundreds of GB made from thousands of images of our planet and then fly over vast territories and recognize our cities and villages.&lt;br /&gt;
&lt;br /&gt;
The use of World Scenery by FlightGear together with the photoscenery as a background can make the scene very rich in details and pleasing to your eyes.&lt;br /&gt;
== Quick method for Windows users ==&lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. [https://julialang.org/downloads/#official_binaries_for_manual_download Down-Inst Julia Programming Language].&lt;br /&gt;
* 2. [https://imagemagick.org/script/download.php#windows Down-Inst ImageMagick].&lt;br /&gt;
* 3. [https://github.com/abassign/Photoscenary/archive/refs/heads/main.zip Down-Inst photoscenary.jl.zip] Easy Manual installation. Unzip Fhotoscenary-main folder, place it where you preferred. Look inside for the file photoscenary.jl and make it executable by Julia, using Right click &amp;gt;&amp;gt; Properties &amp;gt;&amp;gt; Navigate to the bin folder Julia.exe and choose open with Julia Programming Language.&lt;br /&gt;
===Check===&lt;br /&gt;
* 4. Open FGlauncher &amp;gt;&amp;gt; Settings &amp;gt;&amp;gt; Additional settings. Add the property: --telnet=5000&lt;br /&gt;
* 5. Make sure you have terrasync activated. Automatic download terrain in FGlauncher.&lt;br /&gt;
* 6. In FlightGear v2020.3.18 check the following: Start the simulator (one flight) and access the menu: VIEW/RENDERING OPTIONS. In the right column, make sure you have the &amp;quot;SATELLITE PHOTOSCENERY&amp;quot; option activated and close the flight.&lt;br /&gt;
===Run &amp;amp; Check===&lt;br /&gt;
* 7. Run the program photoscenary.jl. It will run and check with Julia, will prompt telnet connection attempts at 127.0.0.1:5000.&lt;br /&gt;
* 8. Run FG. Fly and check visually that you are getting textures. Give it a time, you'll get better textures progressively during your flight. &lt;br /&gt;
* 9. Check in C:\Users\YOUR_USER_NAME\FlightGear\Downloads\TerraSync\Orthophotos. You should see folders of type &amp;quot;e000n00&amp;quot; containing &amp;quot;.dds&amp;quot; files.&lt;br /&gt;
* 10. Check that the Julia's window running photoscenary.jl is getting data (tiles).  &lt;br /&gt;
&lt;br /&gt;
In case of doubts, the next video at SUMU Montevideo area by Manuel Aceña is recommended as a reference.&lt;br /&gt;
=== Video  ===&lt;br /&gt;
{{#ev:youtube|PbYAvxmAkIc}}&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The success that photoscenery is achieving among FlightGear users has prompted me to study a program for downloading and installing photoscenery via a simple command to run inside a terminal (if we are in Linux or Mac OS) or in a command prompt (if we are in Windows).&lt;br /&gt;
&lt;br /&gt;
The program was developed in Julia which is a latest generation programming language developed by MIT. This language looks quite similar to Nasal and therefore the code is easily readable by those who already use the FlightGear Nasal language script, but it is extremely faster and full of features that make the creation of this program quick and easy enough to evolve. Obviously the only inconvenience is that Julia has to be installed on your system, but it is a very simple action and equivalent to the same need to install ImageMagick on your system, this latter program allows the conversion of images in DDS format.&lt;br /&gt;
[[File:Julia photoscenery generator - Towards Budapest on the Danube plain.jpg|thumb|500x500px|The photoscenary allows to have very realistic effects on rather complex territories, such as crops in the plains. The image shows the signs of the passage of old rivers, still visible as a difference in the color of the vegetation.]]&lt;br /&gt;
&lt;br /&gt;
==Installing the programs==&lt;br /&gt;
&lt;br /&gt;
=== FlightGear ===&lt;br /&gt;
Currently to utilise photoscenery the minimum FlightGear version is 2020.3.18&lt;br /&gt;
&lt;br /&gt;
===Julia installation===&lt;br /&gt;
https://julialang.org/&lt;br /&gt;
&lt;br /&gt;
Julia installation is straightforward, whether using precompiled binaries or compiling from source. Download and install Julia by following the instructions at https://julialang.org/downloads/. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Windows&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (installer), 64-bit (portable)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |32-bit (installer), 32-bit (portable)&lt;br /&gt;
|-&lt;br /&gt;
!macOS&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on x86&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (GPG), 64-bit (musl) (GPG)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | 32-bit (GPG)&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on ARM&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |'''64-bit (AArch64) (GPG)'''&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |32-bit (ARMv7-a hard float) (GPG)&lt;br /&gt;
|-&lt;br /&gt;
!Generic Linux on PowerPC&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |64-bit (little endian) (GPG)&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
!Generic FreeBSD on x86&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | 64-bit (GPG)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
For Linux users there are no particular problems, each distribution has Julia among the installable programs. The only problem is the version that may be older than 1.6, in this case I recommend wasting a little more time and updating the installation to 1.6, you can follow [https://medium.com/coffee-in-a-klein-bottle/install-julia-1-5-on-ubuntu-bb8be4b2571d this handy guide]  that explains how to do everything in a few minutes.&lt;br /&gt;
&lt;br /&gt;
The version to use is convenient that it is from '''1.6''' onwards, 1.5.4 is present in the Ubuntu repositories until 2020.10 but it is better to update it to 1.6 even if this requires a little work, But with Ubuntu/Kubuntu version 2021.4 Julia is already at version 1.6.1 and so just use the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''sudo apt install julia'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Julia is a young language that is continuously updated and the difference between Julia 1.5 and 1.6 is really very big for the application startup speed. For the execution there are no particular differences if you use Julia 1.5.4 onwards.&lt;br /&gt;
&lt;br /&gt;
The installation with windows is absolutely the easiest to do, just follow the installer to get a version of Julia 1.6.x All users who have done the installation have never complained of problems.&lt;br /&gt;
&lt;br /&gt;
For '''Mac users''' it might be the slightly more complicated thing, but from the users texts made, I haven't had any issues encountered among Mac users.&lt;br /&gt;
&lt;br /&gt;
For '''Windows users''' have not encountered any particular problems with the installation, which is always the most up-to-date.&lt;br /&gt;
&lt;br /&gt;
{{caution&lt;br /&gt;
|The program was designed to work in Linux (any distribution), Windows 10 and Mac OS. This is very unlikely to work with CygWin as there have been reports of problems calling Imagemagick. Instead, it works with Windows Subsystem for Linux, which is basically a well-integrated emulator of Linux inside the Windows system. In this case, multithreading may not work well, so I recommend running the program with only one Julia thread via the command:&amp;lt;BR&amp;gt;&amp;lt;i&amp;gt;julia -t 1 photoscenary.jl ...&amp;lt;/i&amp;gt;&amp;lt;BR&amp;gt;Or with the command:&amp;lt;BR&amp;gt;&amp;lt;i&amp;gt;julia photoscenary.jl&amp;lt;/i&amp;gt;&amp;lt;BR&amp;gt;But this approach seems like an unnecessary complication to me as the program works perfectly in Windows 10.&lt;br /&gt;
| width   =&lt;br /&gt;
| padding =&lt;br /&gt;
| margin  = 2%&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===ImageMagick installation===&lt;br /&gt;
https://imagemagick.org/index.php&lt;br /&gt;
&lt;br /&gt;
For download program this is the link: https://imagemagick.org/script/download.php&lt;br /&gt;
&lt;br /&gt;
Normally the files that are released by satellite image servers are in PNG format, but the PNG files are absolutely unsuitable to be used as photoscenery files. The reason is that the graphics engine of FlightGear must still convert these files into DDS format which is more compressed than the PNG format (about 4 times). Conversion, for very large files, takes a lot of CPU time, slowing down the execution of FlightGear. Therefore for this program it has been chosen to release only the DDS format and therefore ImageMagick is the most suitable program for this operation.&lt;br /&gt;
&lt;br /&gt;
ImageMagick allows you to convert files transparently to the user very quickly.&lt;br /&gt;
&lt;br /&gt;
In Linux distributions, ImageMagick is often already present, to find out just type the command &amp;lt;code&amp;gt;'''convert --version'''&amp;lt;/code&amp;gt; and see if something responds. In windows it must be downloaded with an installer that can be downloaded here: https://imagemagick.org/script/download.php#windows&lt;br /&gt;
&lt;br /&gt;
The installation in Windows of ImageMagick could give problems if it has not been correctly carried out. Therefore, if the photoscenary.jl program returns an error due to the lack of ImageMagick (the program always checks at the start) it is convenient to remove ImageMagick through the Windows program management and install it again.&lt;br /&gt;
&lt;br /&gt;
===The photoscenary.jl installation===&lt;br /&gt;
https://github.com/abassign/Photoscenary&lt;br /&gt;
&lt;br /&gt;
The program is written in pure Julia code, there are no scripts that can complicate your life. However, some rules must be followed that simplify all the work.&lt;br /&gt;
&lt;br /&gt;
First create a directory where to place the program and its support files. The directory can be placed wherever you want as the program will dynamically build its references. Once the directory (or folder for Mac users) is done, download the Zip file that GitHub generates obtained from this link: https://github.com/abassign/Photoscenary.git&lt;br /&gt;
&lt;br /&gt;
[[File:Github for photoscenary.jl.png|alt=|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Click on code and it will download the zip file that you can open and insert the contents into the folder you created. In the folder you will find some auxiliary files, but now let's analyze the program files.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;'''photoscenary.jl'''&amp;lt;/code&amp;gt;  It is the Julia program to run, you can open it and see it with a simple text editor, I think some of you who have programmed in Python or NASAL will have no difficulty understanding how it works. However the program is compiled every time you run it, it is this compilation, really efficient and fast, that allows you to obtain an excellent executive performance.&lt;br /&gt;
*&amp;lt;code&amp;gt;'''params.xml'''&amp;lt;/code&amp;gt;  It is an XML file that contains some parameters necessary for the correct execution of the program.&lt;br /&gt;
*&amp;lt;code&amp;gt;'''airports.csv'''&amp;lt;/code&amp;gt;  It is the file, extracted from the correspondent of FlightGear, which contains a list of airports, their coordinates and the extended name. This file is essential in order to use a location option for the area to be downloaded.&lt;br /&gt;
&lt;br /&gt;
==Execution of the program ==&lt;br /&gt;
&lt;br /&gt;
===Hello World!===&lt;br /&gt;
There is a minimal execution that allows you to check if everything we have done has worked correctly, this is a sort of ''Hello World'' of the program.&lt;br /&gt;
&lt;br /&gt;
The most important thing is to go to the directory (folder) where you installed the program with a ''terminal'' or with a ''command prompt'' (if you are in Windows).&lt;br /&gt;
&lt;br /&gt;
So the first thing to do is to be with the terminal inside this directory and run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia photoscenary.jl'''&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An area of 2048 pixels (long side) tiles with a size of approximately 10x10 NM is generated, with the coordinates of the ''Orio al Serio Airport'' (LIME) in the center. Not having entered any other parameters, the processing time is relatively long as only one download per tile is performed. &lt;br /&gt;
&lt;br /&gt;
[[File:Test julia photoscenary.jl.png|frameless|800x800px]] &lt;br /&gt;
&lt;br /&gt;
We carefully observe this execution, the first line shows the name of the program, the version and the date of realization, then follows the indication that the prerequisite test will take place. If we are at the first execution we will see an endless series of compilations that can make us think that something has not gone well, but do not worry, it is simply the module management system that downloads the modules useful for the execution of the program and that are not present in the base system. In this way the Julia program updates the necessary components without having to prompt the user to do it for him. &lt;br /&gt;
&lt;br /&gt;
In this particular case, which occurs only the first time or in a version change, the application communicates that it will terminate the execution and invites the user, once back to the command prompt, to run the same command again, also in this case there could be a lot of updating of the modules that have not been updated in the first cycle, do not worry, everything is going great. At the end of the update, finally, the execution of the code contained in the program takes place.&lt;br /&gt;
&lt;br /&gt;
The image above summarizes what happened during the download of the tiles.&lt;br /&gt;
&lt;br /&gt;
Very important to note the line:&lt;br /&gt;
&lt;br /&gt;
'''ImageMagick is operational!'''&lt;br /&gt;
&lt;br /&gt;
This line tells us that the system has done a test with ImageMagick installed on its system and has verified that it works correctly. If this does not work, since without ImageMagick the system cannot do anything, you have an exit with a program error (Error code 504).&lt;br /&gt;
&lt;br /&gt;
====Description of the individual status lines of the processes performed====&lt;br /&gt;
We now summarize the content of the individual lines that indicate the modules downloaded and their status:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Column!!Content&lt;br /&gt;
|-&lt;br /&gt;
!Time:&lt;br /&gt;
|Processing time for individual tiles&lt;br /&gt;
|-&lt;br /&gt;
!elab:&lt;br /&gt;
|Total processing time&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
( ... {{!}} ... ) &amp;lt;!-- This must be on a separate line for the table to render it properly, even though {{!}} helps break it less. --&amp;gt;&lt;br /&gt;
|The processing time for each tile followed by the estimated time.&lt;br /&gt;
These two values allow us to understand the efficiency of the work in progress.&lt;br /&gt;
|-&lt;br /&gt;
!Tiles:&lt;br /&gt;
|Number of tiles that have been processed by the program.&lt;br /&gt;
|-&lt;br /&gt;
! on&lt;br /&gt;
|Total number of tiles to be processed.&lt;br /&gt;
|-&lt;br /&gt;
!res&lt;br /&gt;
|The residual tiles to be processed.&lt;br /&gt;
|-&lt;br /&gt;
!Th:&lt;br /&gt;
|Number of threads used by the process.&lt;br /&gt;
|-&lt;br /&gt;
!path:&lt;br /&gt;
| The path and name of the processed file.&lt;br /&gt;
|-&lt;br /&gt;
!MB/s:&lt;br /&gt;
|Download speed in Mega Bytes on second.&lt;br /&gt;
|-&lt;br /&gt;
!MB dw:&lt;br /&gt;
|Amount of mega bytes downloaded overall.&lt;br /&gt;
|-&lt;br /&gt;
!( ... )&lt;br /&gt;
| Type of activity carried out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Activate the Julia multi thread ===&lt;br /&gt;
Julia is a language created for applications on supercomputers, artificial intelligence, number-crusher, etc.&lt;br /&gt;
&lt;br /&gt;
These are applications that require systems with a lot of CPUs and therefore the compiler has the ability to activate very sophisticated strategies to better manage resources.&lt;br /&gt;
&lt;br /&gt;
The photoscenary.jl program performs many processes in parallel in order to optimize the download and conversion of images. The conversion from the original PNG format to the more efficient format for FlightGear DDS requires a rather heavy application (ImageMagick) which can only be run on single CPUs. For this it is very efficient to run the program on multiple CPUs, but it is necessary to use some care that I explain below.&lt;br /&gt;
&lt;br /&gt;
==== Core &amp;lt;-&amp;gt; CPU what are they ? ====&lt;br /&gt;
Any PC has a processor with a certain number of ''physical'' ''core'' ranging from 2 (Intel i3) to values that can go up to 12 or more for more performing desktop processors.&lt;br /&gt;
&lt;br /&gt;
For years, all processor cores have been able to handle two separate CPU, using a hardware trick. Therefore an i3 processor with two core will allow to manage up to 4 CPU (or separate processes) at the same time.&lt;br /&gt;
&lt;br /&gt;
At this point it is important the role of the operating system that must manage the available CPU and assign them to the running programs.&lt;br /&gt;
&lt;br /&gt;
So when you start Julia it is possible to reserve the number of CPU to the application will require than and this must be done at the beginning so that the compiler will configure the code properly.&lt;br /&gt;
&lt;br /&gt;
This is achieved with the '''-t n''' command where n is a number equal to or less than the number of available CPU.&lt;br /&gt;
&lt;br /&gt;
==== The Julia -t n option ====&lt;br /&gt;
If you run the program with the command:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Only one CPU will be used and this can be a bottleneck when downloading files from the web server that distributes the images, since, especially if you have images composed of a single file (from the smallest ones up to 2048 pixels) the program uses only one process (for larger images the program uses many more download processes).&lt;br /&gt;
&lt;br /&gt;
So let's say we have a machine with 6 core and therefore 12 CPU we can launch the program with this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we are on a 4 CPU as i3 it is necessary to reduce the value to 4, but maybe 3 would also be good, so we can write the command like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 3 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Be careful though ====&lt;br /&gt;
''If the value of the maximum number of CPU is too high, the behavior of the operating system could be such as to reduce the advantage in execution or even slow down the program!''&lt;br /&gt;
&lt;br /&gt;
This certainly happens when the value of the '''''-t''' numbe''r is higher than the number of CPUs and if the system is windows 10 or 8 you will have an incredible slowdown of the program! Therefore on a Windows machine it is not advisable to always enter a value less than or equal to the number of CPU of the processor in use (''number of cores multiplied by 2'').&lt;br /&gt;
&lt;br /&gt;
For Linux and Mac systems the problem seems to be less evident and so you can try to increase the number beyond the theoretical maximum value.&lt;br /&gt;
&lt;br /&gt;
=== Now let's try to delete all the files just inserted===&lt;br /&gt;
This test allows us to understand the use of a very useful parameter to manage the files we create with this application, for example if we want to delete the files, perhaps to have an area managed with the traditional FlightGear system, we can do it with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl --over 9'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will get this result (I show only the last lines to focus attention on the fact that the system declares to perform some removes)&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia photoscenary.jl --over 9.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
===Now lets put the turbojet into the download program===&lt;br /&gt;
We now put the &amp;lt;code&amp;gt;'''-t 10'''&amp;lt;/code&amp;gt; option on the Julia compiler start command. This option allows you to run multiple threads at the same time allowing you to speed up the download of files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In this image I show all the lines processed to show how the progression of the download speed increase. As you can see at first the speed seems low, but in reality the system has launched about ten threads that form a queue of requests to the image server. The format of the images, when nothing is declared, as in this example, is 2048 pixels on the long side, and the size of the DDS file (we are at an intermediate latitude between 62-22 degrees) is 1 MB.&lt;br /&gt;
&lt;br /&gt;
The average speed is 1.7 MB/s (but can go even higher) and is determined by the actual workload on the server distributing the images.&lt;br /&gt;
&lt;br /&gt;
This way we have more than tripled the download speed.&lt;br /&gt;
&lt;br /&gt;
Obviously these values ​​can change a lot, but they are on average better than those obtained with single downloads. Not only that, but multithreading also works with the ImageMagick program that performs the transformation of the PNG file into DDS, this transformation is not fast, but in this way it is parallelized, making this phase less expensive in terms of time.&lt;br /&gt;
&lt;br /&gt;
This feature is even more interesting for larger format images.&lt;br /&gt;
&lt;br /&gt;
===Increase the resolution of the images, radius and --over option===&lt;br /&gt;
Let's see these two new options that can be given to the program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-r 5'''&amp;lt;/code&amp;gt; where n is the number of miles of radius, if &amp;lt;code&amp;gt;'''-r'''&amp;lt;/code&amp;gt; (Radius) is equal to 5 it means that we are covering a square whose diagonal is 5 NM. Note that if -r is not defined the system considers the radius of 10 NM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; indicates the resolution of the images we want to obtain, if this option is not inserted the default value is 2 equal to an image, on the long side, of 2048 pixels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;j'''ulia -t 10 photoscenary.jl -r 5 -s 4'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 5 -s 4 (skip).png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In fact the system has not done anything, the status message, at the bottom of each line, tells us (skip) which means that the program has seen that an image is already present and this image cannot be overwritten as it is an image valid (actually the program checks the image by loading and verifying it), if the image was not valid, it would delete it and replace it with a new one.&lt;br /&gt;
&lt;br /&gt;
But it is still possible to override by inserting the &amp;lt;code&amp;gt;'''--over 1'''&amp;lt;/code&amp;gt; option at this point this interesting fact happens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 4 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 5 -s 4 --over 1.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
This download is '''16 times slower''' as the precedent download (Without the &amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt; option the image downloads as &amp;lt;code&amp;gt;-s 2&amp;lt;/code&amp;gt; which corresponds to 2048 pixels long edge) &amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; option downloads images of '''8192''' pixels long side. In fact the system downloads 16 images with size of '''2048''' and composes them into a matrix '''4x4,''' at the end of the composition the images are first transformed into an temporary PNG image format which will be processed by ImageMagick and becomes an DDS format image that is compatible with FlightGear without any on-the-fly conversion (which is done for PNG images). Therefore this line shows us the downloading of the single images that make up the matrix in order to give an idea that something is happening.&lt;br /&gt;
&lt;br /&gt;
[[File:Julia -t 10 photoscenary.jl -r 5 -s 4 --over 1-BW.png|alt=|frameless|799x799px]]&lt;br /&gt;
&lt;br /&gt;
Note that the download speed of individual images has increased (in this case 2.98 MB/s) as the system has opened several dozen download threads (96 download tasks are open at the same time as their number is the product of 6 threads x 16 images) .&lt;br /&gt;
&lt;br /&gt;
It is important to understand this aspect of the program which can easily bring the network into saturation. In this example 3 MB/s correspond to about 30-40 MBit/s which is about 70-80% of the bandwidth that the network allows me to have. For this, if the band used is high, in order to keep a good surfing speed on the network, it is sufficient to reduce the value of the threads in Julia from -t 10 to -t 4 or -t 5.&amp;lt;blockquote&amp;gt;'''Note''': ''Julia is a programming language that has an incredible variety of methods for exploiting all possible hardware solutions. What I exploit in this program is only a small part, Julia even allows you to distribute the processing on remote machines, perhaps placed on different networks, in order to distribute the workload through the use of a few instructions.''&amp;lt;/blockquote&amp;gt;From a series of tests that I have done, 8K images are the most interesting for systems that have at least 16 GB of RAM, if the RAM is lower these images can lead to FlightGear in memory overflow and therefore its closure by the system operating.&lt;br /&gt;
&lt;br /&gt;
==== The -s parameter ====&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s'''&amp;lt;/code&amp;gt; defines 7 possible resolutions for images:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter!!Side px!! Format!!Size MB!! Comment&lt;br /&gt;
!PC RAM GB&lt;br /&gt;
|-&lt;br /&gt;
!-s 0&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|512&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|0.064&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
!-s 1&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|1024&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|0.256&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
!'''-s 2'''&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|2048&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|1&lt;br /&gt;
|&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4&lt;br /&gt;
|-&lt;br /&gt;
!-s 3&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4096&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|4&lt;br /&gt;
|2 x 2 matrix = 4 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|8&lt;br /&gt;
|-&lt;br /&gt;
!'''-s 4'''&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|8192&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|4 x 4 matrix = 16 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|-&lt;br /&gt;
!-s 5&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16384&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|64&lt;br /&gt;
|8 x 8 matrix = 64 images with 2048 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|-&lt;br /&gt;
!-s 6&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|32768&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|DDS&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|256&lt;br /&gt;
|8 x 8 matrix = 64 images with 4096 pixels side to download&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|16&lt;br /&gt;
|}&lt;br /&gt;
The PC RAM that I recommend for PCs that need to download images. So I was able to download, even with Windows 10, which is much heavier than Linux, 16384 px images with only 4 GB of RAM! In this case there is a huge increase in virtual memory (''Both Linux with kernel 5 and Windows 10 have a dynamic virtual memory that is quite efficient if the hard disk is of the SSD type'') in use which, due to the structure of the program and the particular compiler used, it does not seem to slow down performance.&lt;br /&gt;
&lt;br /&gt;
==== The --sdwn parameter====&lt;br /&gt;
&amp;lt;code&amp;gt;'''--sdwn'''&amp;lt;/code&amp;gt; It is a parameter that defines how to change the value of the resolution or the distance using a linear method. For example, if the coverage radius is 100 nm and -s 5 (16K pixels), if we set &amp;lt;code&amp;gt;'''--sdwn 2'''&amp;lt;/code&amp;gt; we will have this resolution trend:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Dist. (nm)&lt;br /&gt;
!0&lt;br /&gt;
!10&lt;br /&gt;
!20&lt;br /&gt;
! 30&lt;br /&gt;
!40&lt;br /&gt;
! 50&lt;br /&gt;
!60&lt;br /&gt;
!70&lt;br /&gt;
!80&lt;br /&gt;
!90&lt;br /&gt;
!100&lt;br /&gt;
|-&lt;br /&gt;
!Res. (0..6)&lt;br /&gt;
|5&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|4&lt;br /&gt;
|3&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
As can be seen from the table, the resolution in pixels of the images varies with the distance from the center (radius).&lt;br /&gt;
&lt;br /&gt;
With this method it is possible to obtain very large coverage without occupying too much memory and greatly reducing download times. Certainly the quality of the farther images is lower, but the problem could be not very perceptible as normally an airplane when it takes off is low on the ground and therefore the pilot wishes to have a high resolution (images with many pixels), but then rises in altitude and the resolution of the terrain is acceptable although much lower. With this method it is possible to cover large areas of land in a very short time, shorter than the flight necessary to cross that territory.&lt;br /&gt;
&lt;br /&gt;
====The --over parameter====&lt;br /&gt;
A second important fact is the &amp;lt;code&amp;gt;'''--over 1'''&amp;lt;/code&amp;gt; parameter which tells the system it can overwrite, the &amp;lt;code&amp;gt;'''--over'''&amp;lt;/code&amp;gt; option &amp;lt;code&amp;gt;'''1'''&amp;lt;/code&amp;gt; indicates that overwriting can only occur if the new file is larger than the file it replaces.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to build limited areas with higher resolution, for example airport areas, or particularly beautiful areas that we want to enhance.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;'''--over'''&amp;lt;/code&amp;gt; option has the following recognized parameters:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameter!!Overwriting/deletion&lt;br /&gt;
|-&lt;br /&gt;
!--over 0&lt;br /&gt;
|Default option that inhibits any overwriting of images.&lt;br /&gt;
|-&lt;br /&gt;
!--over 1&lt;br /&gt;
|Overwrite only if the image to be replaced is larger than the present one&lt;br /&gt;
if the previous image is not present, the image will be inserted anyway.&lt;br /&gt;
|-&lt;br /&gt;
!--over 2&lt;br /&gt;
|Always overwrites, for example if you want to reduce the size of the images by a certain area.&lt;br /&gt;
|-&lt;br /&gt;
!--over 9&lt;br /&gt;
|Deletes the images present in the defined area.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Let's go to Fiumicino (Rome in Italy) by -i option===&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -s 4 -i fiumicino'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 125012.png|alt=|frameless|799x799px]]&lt;br /&gt;
&lt;br /&gt;
We are already familiar with these options&lt;br /&gt;
&lt;br /&gt;
The absence of '''&amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt;''' indicates that the image extraction radius is the default of 10 nm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-s 4'''&amp;lt;/code&amp;gt; indicates a resolution of 8192 pixels long side&lt;br /&gt;
&lt;br /&gt;
But this is new&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''-i fiumicino'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It means that we are selecting an airport containing the word '''fiumicino''&amp;lt;nowiki/&amp;gt;'. The search takes place in a database, with an Open Data license, which reports over 60,000 airports that have ICAO code.&lt;br /&gt;
&lt;br /&gt;
The database is distributed together with the ''photoscenary.jl'' program with the ''airports.csv'' file, which is easily editable, via a text editor. The ''airports.csv'' file is not actually the database used by the program, but only the data source which is automatically converted into the more practical ''airports.jdb'' file which is the database file used by the JuliaDB package.&lt;br /&gt;
&lt;br /&gt;
If you want to edit ''airports.csv'', once the file is saved, you will notice that the next time you run the ''photoscenary.jl'' program it will take a few seconds until a new ''airports.jdb'' is generated.&lt;br /&gt;
&lt;br /&gt;
The text inserted after the '''&amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;''' parameter can contain a single word or a sentence, but in this case it must be delimited by double quotes.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i &amp;quot;leonardo da vinci&amp;quot;&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Once the program has started, the system will respond by entering also with this output:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 213622.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
For example, if you enter as a name&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i rome&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The program will respond with the first 30 airports that correspond to the presence of the word Rome in one of the three search fields, as shown in this figure.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 215037-2.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
In this case, just enter a unique selector, such as the ICAO ID, to obtain the searched airport, as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i LIRF&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Therefore, the search using the -i option can be extremely convenient, as it allows you to quickly have the coordinates of any airport present in the ICAO database.&lt;br /&gt;
&lt;br /&gt;
The search word can also be partial as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i zuric&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210520 220731.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
Any accented letters are normalized to the unaccented Latin form, for example:&lt;br /&gt;
&lt;br /&gt;
''Zürich Airport'' becomes ''Zurich Airport''&lt;br /&gt;
&lt;br /&gt;
and therefore the search can be successful if you write:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;-i &amp;quot;zurich airport&amp;quot;&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
=== Dynamically download orthographic images by --connect ===&lt;br /&gt;
It is very convenient to download the orthographic images of the territory actually flown over by the plane.&lt;br /&gt;
&lt;br /&gt;
In this case, the system will use the aircraft's course as reference, interspersed with points of radius -r.&lt;br /&gt;
&lt;br /&gt;
The program will then download only the images actually needed, thus minimizing the amount of data to download.&lt;br /&gt;
&lt;br /&gt;
The parameter to activate this function is this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--connect &amp;quot;&amp;lt;IP address&amp;gt;:&amp;lt;port&amp;gt;&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the program finds this parameter, checks if the syntax of the address is correct and listens showing a line that has as, first character and an arrow that rotates 45 degrees every second, followed by the sentence that begins with the text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''Try the frist connection to Flightgear with address: ...'''&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This delay can last for an indefinite time, until Flightgear is activated with, obviously, the Telnet connection port activated, as explained above.&lt;br /&gt;
&lt;br /&gt;
When Flightgear is activated, the program realizes it and starts evaluating the geographic position of the aircraft and then, if necessary, downloading and positioning the DDS images in the photorealistic scenario.&lt;br /&gt;
&lt;br /&gt;
If you close Flightgear again, the program will be put on hold again, a situation indicated by the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''Try connect to Flightgear with address: ...'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To exit the program it is necessary to type the key sequence: [CTRL] + [C]&lt;br /&gt;
&lt;br /&gt;
Exiting the program will have no effect on the downloaded DDS files as the program operates through transactional methods.&lt;br /&gt;
&lt;br /&gt;
==== A simple example ====&lt;br /&gt;
For example, you can run this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the program will download the images in a radius of 10 nm for the entire length of the route. Thus forming a corridor of images that can give the illusion of a much larger territorial coverage than reality.&lt;br /&gt;
&lt;br /&gt;
The images, if the &amp;lt;code&amp;gt;-s n&amp;lt;/code&amp;gt; parameter is not specified, will have the size of 2048 px, this is a good enough size for flights above 10,000 ft. &lt;br /&gt;
&lt;br /&gt;
If the speed of the plane is not too high and the internet line is good, it may happen that the pilot can get a flight with complete coverage of the orthographic images, giving the illusion of having downloaded very large geographical areas and more a narrow corridor that follows the route followed by the plane ..&lt;br /&gt;
&lt;br /&gt;
If, on the other hand, the speed of the plane is high, or the speed of downloading the images is not high, it may be necessary, from time to time, to activate the option to update the scenario using the command:&lt;br /&gt;
&lt;br /&gt;
''[menu] -&amp;gt; [debug] -&amp;gt; [Reload Scenery]''&lt;br /&gt;
&lt;br /&gt;
In this case the simulator will freeze for a few seconds and then a scenario will be observed with orthographic images of the territory overflown.&lt;br /&gt;
&lt;br /&gt;
==== Preparation of Flightgear to allow you to communicate with the photoscenary.jl program ====&lt;br /&gt;
[[File:Julia photoscenery generator - launcher QT configuration - 20210618 232448.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
First you need to run Flightgear with the option:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--telnet=5000'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command will activate the telnet server on Flightgear with port 5000 active. The port can be changed, but the important thing is that it is then the communication port entered in the &amp;lt;code&amp;gt;--connect&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
In the example in Additional Settings we see that the first line is the telnet server activation command, server needed to communicate with the photoscenary.jl program.&lt;br /&gt;
&lt;br /&gt;
In additional settings I have inserted two other options that may be useful:&lt;br /&gt;
&lt;br /&gt;
The parameter ''--httpd = 5001'' which activates an HTTP server, visible through the browser, useful for displaying the route on a geographic map. The third option instead activates multithreading which, eg run PC with at least 2 cores, allows you to render the flight more fluid.&lt;br /&gt;
&lt;br /&gt;
==== Performing dynamic loading of orthographic images during flight ====&lt;br /&gt;
First you need to start Flightgear (and with it the telnet server we configured previously), wait for its loading phase to finish. And then start the program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Julia photoscenery generator - execution connect param - 20210618.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Unlike the other methods of selecting the areas to be filled with images, this method can show an intermediate step called &amp;quot;System pending ...&amp;quot; which allows you to communicate to the pilot that the program is running smoothly, but has already downloaded all the images needed for the current flyover area and then waits to reach the next area from which it will start downloading images again.&lt;br /&gt;
&lt;br /&gt;
==== However, the other options are also allowed ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 4 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 3 --over 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;--connect&amp;lt;/code&amp;gt; command does not prevent the use of other options, such as image resolution and enabling overwriting if the new image is of a higher resolution than the one already present. &lt;br /&gt;
&lt;br /&gt;
===Follow a route generated with route manager by --route===&lt;br /&gt;
The FlightGear ''route manager'' program allows you to generate a route that passes through various points and/or airports, the route can be saved to a file that is placed in the Export folder of the FlightGear $FG Home directory.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211312.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
In this example, a route has been generated made up of 6 points, of which the first and last are respectively the departure airport and the arrival airport.&lt;br /&gt;
&lt;br /&gt;
The route can be saved in a file which, in the example, has the name with a name ''LOWI-LIME.xml''&lt;br /&gt;
&lt;br /&gt;
The file is saved in the ''Export'' directory of the FGFS HOME directory.&lt;br /&gt;
&lt;br /&gt;
Being an XML file it is possible to open it through any text editor, and possibly also modify it, an operation, by the way, quite simple.&lt;br /&gt;
&lt;br /&gt;
Here's what the xml file used for our example looks like:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211351.png|frameless|929x929px]]&lt;br /&gt;
&lt;br /&gt;
The file can be as long as you like, however at the end it defines a path like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210523 211204.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
Now that it has been clarified what a route is and how it is saved, let's see how it can be exploited to cover the photoscenary only for the parts near the route.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --route LOWI-LIME.xml -s 2 -r 10 --over 1 -d 0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
In this example, the saved route is taken over by the program that searches for it. This little magic is used to simplify the program execution command as it is assumed that the file is of XML type and contains specific tags. If these tags are not present, the file will be considered invalid. If, on the other hand, if the file is validated, then it becomes the basis for extracting the path.&lt;br /&gt;
&lt;br /&gt;
Once the file is validated, the program is executed, but first the project showing the single execution steps is shown.&lt;br /&gt;
&lt;br /&gt;
The step is indicated with its step number and a decimal representing the sub-step. Therefore a step that has zero decimal indicates that that step has been inserted in the route manager, while the others are steps built by the algorithm to give continuity to the coverage of the tiles.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210524 004027.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
It is noted that at the end of the project (part in red in the screen shown here) the download phase begins for each single step, which, in this example, are 21.&lt;br /&gt;
&lt;br /&gt;
Obviously the execution of the program can take a relatively long time, but certainly much less if that area had been covered with a single large set of tiles.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''that instead of entering the file name together with the path, only the file name can be entered, for example LIME-LIMJ.gpx somewhere, as long as it is inside the homepage or a subfolder. The program has an automatic search function which will find the file and use it as a route.''&lt;br /&gt;
&lt;br /&gt;
==== Skyvector format ====&lt;br /&gt;
Since version 0.3.9 the automatic conversion of files produced with [https://skyvector.com/ Skyvector] has been defined. The file in .gpx format is automatically converted to produce the equivalent route to the file produced by the FGFS route manager when supplied via the &amp;lt;code&amp;gt;--route&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
Skyvector is a very comprehensive route generator that is often used to plan routes in civil aviation. The use of this tool allows you to create route files in gpx format that can be read by the FGFS route manager and by this program. The conversion is transparent, that is, it is the program that parses the XML and determines its real format.&lt;br /&gt;
&lt;br /&gt;
===Let's go via the geographic coordinates by -o -a &amp;lt;code&amp;gt;'''--latll --lonll --latur --lonur option'''&amp;lt;/code&amp;gt;===&lt;br /&gt;
The coordinates are made explicit from the first line of the image:&lt;br /&gt;
&lt;br /&gt;
central point ''lat: 21.317454 lon: -157.91603'' radius: ''5.0''&lt;br /&gt;
&lt;br /&gt;
Not only that, but the second line reminds us in which area we are operating, that is an ideal rectangle with coordinates defined as follows:&lt;br /&gt;
&lt;br /&gt;
Lower left corner&lt;br /&gt;
&lt;br /&gt;
''latLL: 21,200 lonLL: -158,100''&lt;br /&gt;
&lt;br /&gt;
Upper right corner&lt;br /&gt;
&lt;br /&gt;
''latUR: 21.500 lonUR: -157.800''&lt;br /&gt;
&lt;br /&gt;
But we could have had the same result with the following parameters that explicitly define the center point:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 3 -a 21.317454 -o ''-''157.91603'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or with the parameters that define the lower left corner and the upper right corner&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -s 3 --latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.8'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entering the position values explicitly is a very convenient way when you do not know the acronym or name of an airport or want to select a particular area via google maps for example.&lt;br /&gt;
&lt;br /&gt;
{{tip|Google maps allows you to give the coordinates in the degrees and fractions of degrees format, used by this program and FlightGear, by simply clicking the right mouse button on the map. Alternatively use the FlightGear [https://scenery.flightgear.org/static/map/index.html scene models map], which has coordinates in decimal format and tile information.}}&lt;br /&gt;
&lt;br /&gt;
===The sea can be a problem --attemps option===&lt;br /&gt;
Now let's enlarge the radius area with &amp;lt;code&amp;gt;'''-r 20'''&amp;lt;/code&amp;gt; (20 NM) with lower resolution tiles, we use in this example &amp;lt;code&amp;gt;'''-s 2'''&amp;lt;/code&amp;gt; (2048 pixels long side)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl --attemps 0'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point we look at the output which points out a few things&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl top.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Meanwhile, let's see the effect of the &amp;lt;code&amp;gt;'''--over 0'''&amp;lt;/code&amp;gt; parameter which prevents smaller images from overwriting images already present, but let's also observe another fact:&lt;br /&gt;
&lt;br /&gt;
''The '''err''': column no longer reports the value 0 but numerical values ​​that go up 7..10 and then beyond. This means that some tiles have not been uploaded, not only that, but there is also a very high reduction in the download speed that reaches, barely 0.16 MB/sec.''&lt;br /&gt;
&lt;br /&gt;
The reason for this behavior is that around Honolulu there is the Pacific Ocean, or the sea, and the image server I am using does not show the sea beyond a certain distance from the coast. This means that the program tries to download a certain tile, but it returns an error, unfortunately not immediately, but only after a few seconds, the error starts a recovery procedure that performs the download attempt for two more times, if the third attempt fails, the system places the tiles, not downloaded, in a special list that can be retried in a subsequent cycle.&lt;br /&gt;
&lt;br /&gt;
Here is what we will have at the end of the download batch:&lt;br /&gt;
&lt;br /&gt;
[[File:Test julia -t 10 photoscenary.jl -r 20 -s 2 -i phnl bottom.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Now let's see the incomplete file list that shows the tiles that have not been downloaded, the attempts parameter, in the ''Incomplete file list'', indicates the number of attempts made. By stating that the number of attempts is zero, it means that the program lists only the files that have resulted not downloaded and then exits the program. But if you enter a numeric value for the --attempt parameter instead, you can reprocess the tiles that have not been downloaded, but it is possible to change the number of attempts using the parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''--attempts n'''&amp;lt;/code&amp;gt; (''default is '''2''''')&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;'''n'''&amp;lt;/code&amp;gt; is any integer. Do not increase this value too much, and only do it if the internet connection line is unstable or if the image server often drops the connection.&lt;br /&gt;
&lt;br /&gt;
Attempts to reconnect are quite slow, especially if the images are small, so it is better not to overdo it to avoid unnecessarily lengthening the download times.&lt;br /&gt;
&lt;br /&gt;
===Try to recover the errors --attemps n===&lt;br /&gt;
Often the errors are due to the presence of marine areas that are covered by maps with lower resolution, so the only way to obtain an error recovery is to lower the resolution.&lt;br /&gt;
&lt;br /&gt;
For this an algorithm has been inserted that in the first recovery step uses a width of '''1024''', width which is reduced to '''512,256,128''' etc ... for the following steps whose max number is defined by the value &amp;lt;code&amp;gt;'''--attempts n'''&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Let's try this download, always with the airport of Honolulu adding the possibility of making 3 attempts:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -s 2 -i Honolulu --attemps 3&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
[[File:Julia -t 10 photoscenary.jl -r 10 -s 2 -i Honolulu --attemps 3.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
At the end of the execution it is observed that 6 tiles have been inserted in the incomplete list, therefore it is possible, if the value of &amp;lt;code&amp;gt;'''--attemps'''&amp;lt;/code&amp;gt; is greater than 0 (''by default I remember that it is '''2'''''), to obtain a re-execution only for the tiles in error with a resolution request starting from 1024 pixels down.&lt;br /&gt;
&lt;br /&gt;
With the default value '''&amp;lt;code&amp;gt;--attemps 2&amp;lt;/code&amp;gt;''' it is hereby possible to arrive at tiles of 512 pixels which always seem to be released by the server, with --attempts 3 it is also possible to try tiles of 256 pixels the server does not yet release 512 pixels.&lt;br /&gt;
&lt;br /&gt;
The end result is complete coverage of the entire area. In two resolution groups, that of 2028 pixels proposed with '''&amp;lt;code&amp;gt;--s 2&amp;lt;/code&amp;gt;''' and that of 1024 pixels used by the recovery function.&lt;br /&gt;
&lt;br /&gt;
==Other options==&lt;br /&gt;
The program allows the use of other options that may be useful in certain circumstances, below I give a list with the relative possibilities of use.&lt;br /&gt;
&lt;br /&gt;
===--map '''''n'''''===&lt;br /&gt;
You can change the standard image server. Each image server is identified with a unique id which currently selects the following addresses&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+List of servers currently active and inserted in the params.xml file&lt;br /&gt;
!Id&lt;br /&gt;
!Name&lt;br /&gt;
!Comment&lt;br /&gt;
! Address of the organization&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
|ESRI GIS&lt;br /&gt;
|Default, this servers is for all over the world&lt;br /&gt;
|[https://www.esri.com/en-us/about/about-esri/overview https://www.esri.com]&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
|USGS&lt;br /&gt;
|United States only. Public domain license, only US&lt;br /&gt;
|https://basemap.nationalmap.gov&lt;br /&gt;
|-&lt;br /&gt;
|'''3'''&lt;br /&gt;
|PNOA&lt;br /&gt;
| PNOA only Spain&lt;br /&gt;
|https://www.ign.es&lt;br /&gt;
|-&lt;br /&gt;
|'''4'''&lt;br /&gt;
|Geoportal&lt;br /&gt;
|geoportal.gov.pl only Poland&lt;br /&gt;
|https://www.geoportal.gov.pl&lt;br /&gt;
|}&lt;br /&gt;
[[File:Screenshot_20210524_205813.png|alt=|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
This option allows you to select a specific server different from the standard one (Id = 1). All servers are inserted into the ''params.xml'' file in the following form:&lt;br /&gt;
&lt;br /&gt;
Additional servers can be added simply by adding a new &amp;lt;server&amp;gt; ... &amp;lt;/server&amp;gt; entry within the general &amp;lt;servers&amp;gt; ... &amp;lt;/servers&amp;gt; entry. The Id must be unique, as it is the selector and can take any value. If someone adds their own server they can do it, but I recommend starting from a higher Id, for example 100, so as not to interfere with the Ids that could be added in the future.&lt;br /&gt;
&lt;br /&gt;
''An important recommendation '''is to replace''', in URLs, any &amp;quot;'''&amp;amp;'''&amp;quot; character with &amp;quot;'''|'''&amp;quot; (Pipe or vertical bar)''&lt;br /&gt;
&lt;br /&gt;
For example the URL:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;&amp;lt;url-command&amp;gt;SERVICE=WMS&amp;amp;VERSION=1.1.1&amp;amp;REQUEST=GetMap&amp;amp;LAYERS=OI ...&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
It should be written in the form:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;&amp;lt;url-command&amp;gt;SERVICE=WMS|VERSION=1.1.1|REQUEST=GetMap|LAYERS=OI ...&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
This is the characteristic output that occurs during program execution and shows the image server in use&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210524 205939.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
The selected server highlighted by the red line and shows the main data that allow it to be identified.&lt;br /&gt;
&lt;br /&gt;
Be very careful to use the right server for a certain area, the program does not know if the selected server is valid or not for a certain area, so a wrong server could delete the previously inserted image files.&lt;br /&gt;
&lt;br /&gt;
If you are unsure, check the server site or do a test limited to a certain area. The servers, when they are out of the area, do not give errors, but they release a completely white image, so always be very careful.&lt;br /&gt;
&lt;br /&gt;
===--path or -p ===&lt;br /&gt;
The program normally downloads image files in DDS or PNG format directly to the directory:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;''&amp;lt;home&amp;gt;''/fgfs-scenery/photoscenery/Orthophotos&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
However, sometimes a user wants to use a different destination, perhaps even a different mass storage unit, such as a NAS or a disk connected via USB, in these cases this option becomes very convenient.&lt;br /&gt;
&lt;br /&gt;
There are two ways to define a path:&lt;br /&gt;
&lt;br /&gt;
'''Path relative to the home directory ''('''''&amp;lt;nowiki/&amp;gt;''in the example the user is /home/abassign''')'''''&amp;lt;nowiki/&amp;gt;''':'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl -i pantelleria -r 20 -s 3 --attemps 2 -p scenary-dir&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The system will respond:&lt;br /&gt;
&lt;br /&gt;
The images path is: '''/home/abassign/scenary-dir/Orthophotos'''&lt;br /&gt;
&lt;br /&gt;
'''Absolute path:'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia photoscenary.jl -i pantelleria -r 20 -s 3 --attemps 2 -p /home/abassign/scenary-dir&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The path, in the case of using Windows, can be written in the Windows notation, for example:&lt;br /&gt;
&lt;br /&gt;
''c:\users\abassign\scenary-dir'' &lt;br /&gt;
&lt;br /&gt;
or in Linux:&lt;br /&gt;
&lt;br /&gt;
/home/abassign/scenary-dir&lt;br /&gt;
&lt;br /&gt;
==== Automatic path if the program is connected to FGFS ====&lt;br /&gt;
Since version 0.3.8 a method has been introduced that extracts the path directly from the FGFS program if it is connected (use the '''--connect''' param for the connection). The method is therefore implicit if the program is connected and the path is not defined, the path used will be the one described in the property tree of FGFS ''/sim/fg-scenery''. Obviously, if in the command line there is the --path parameter, the path reported by this has a higher priority.&lt;br /&gt;
&lt;br /&gt;
=== --save ===&lt;br /&gt;
The program '''always saves''' the images (''from version 0.3.8'') to a directory that can be implicit or explicitly defined with the '''--save &amp;quot;a path&amp;quot;''' parameter.&lt;br /&gt;
&lt;br /&gt;
There are therefore two cases:&lt;br /&gt;
&lt;br /&gt;
# If the '''--save''' parameter has a valid path, the program will save the images to be deleted on that path.&lt;br /&gt;
# If the save parameter is not present, the path is determined automatically by reading the path of insertion of the downloaded files by adding the sub-name '''''&amp;lt;path&amp;gt;-saved''''' to the path so as not to allow FGFS to use it as an operational directory.&lt;br /&gt;
&lt;br /&gt;
If you do not want to save the replaced images, you must explicitly enter the parameter '''--nosave''' as explained in the next paragraph.&lt;br /&gt;
&lt;br /&gt;
The path is always absolute, as it must be possible to manage external drives in which you want to insert the files to be saved.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to use an external disk, perhaps of a mechanical type of 1-4 TB, to save the files that have been downloaded by the program, all divided by size in pixels, as in this example:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;--save /media/abassign/save_2018/Salvataggi&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
You will get a configuration similar to this:&lt;br /&gt;
&lt;br /&gt;
[[File:Photoscenary julia save option example 01.png|frameless|740x740px]]&lt;br /&gt;
&lt;br /&gt;
As you can see, the images are grouped by size in pixels (s 0 &amp;lt;-&amp;gt; 512 ... s 4 &amp;lt;-&amp;gt; 8196 ... etc) and therefore the program, depending on the size of the image to be inserted, can choose the most appropriate image.&lt;br /&gt;
&lt;br /&gt;
It is interesting to try this configuration with -s 3 (4096 pix) which will load all the images from 4096 into the scenario directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you later want to have smaller images, for example le s 2 (2048 pix) or le s 1 from 1024 px just type this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 1 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''--over 2''' option is used to allow the replacement of larger images with smaller ones, as explained in the appropriate paragraph.&lt;br /&gt;
&lt;br /&gt;
The reorganization time of the images is very fast and is linked to the moving time of the images present in the system.&lt;br /&gt;
&lt;br /&gt;
Note that if the 4096 pix images were not saved yet, before replacing with the smaller images, they will be saved in the path indicated by --save.&lt;br /&gt;
&lt;br /&gt;
==== Summing up ====&lt;br /&gt;
With the --save option you can save the images that will be replaced when loading new images with different resolution. With this technique it is possible to save large areas of images on an external disk and finally, with this technique it is possible to change the resolution of the images without ever losing the downloaded images.&lt;br /&gt;
&lt;br /&gt;
=== --nosave ===&lt;br /&gt;
If we want to inhibit the autosave mode, just enter the '''--nosave''' parameter in the command line. With this parameter, saving of images that are deleted from the path is blocked.&lt;br /&gt;
&lt;br /&gt;
=== --png ===&lt;br /&gt;
It is a switch that allows you to download images in PNG format without switching to DDS images. This feature makes the downloaded images much larger (4 times) and easily viewable or editable by an image editing program such as GIMP or Imagemagick.&lt;br /&gt;
&lt;br /&gt;
If you subsequently start the program without the --png option, the program will try, before downloading the images from some external server, to check if the PNG images present are compatible with the DDS to be generated, if they are you will have the rapid conversion live PNG images in DDS.&lt;br /&gt;
&lt;br /&gt;
If the --save option has been activated, the PNG images will not be lost, but saved in the chosen path.&lt;br /&gt;
&lt;br /&gt;
=== --tile===&lt;br /&gt;
The world of Flightgear is represented with a tessellation of rectangles according to a rule defined at this link:&lt;br /&gt;
&lt;br /&gt;
https://wiki.flightgear.org/Tile_Index_Scheme&lt;br /&gt;
&lt;br /&gt;
The tile defines the minimum loadable area for a photo scenery, its size varies with latitude. Here is an example of how the tiles are distributed on the globe taken from a FGUK movie:{{#ev:youtube|YxWV4wk_dHw}}All the images that make up the photoscenery have a unique numerical name that is calculated through a special algorithm according to the latitude and longitude of the tile. This number is defined as the tile identifier.&lt;br /&gt;
&lt;br /&gt;
You can view the tile number in the FlightGear [https://scenery.flightgear.org/static/map/index.html scene models map] (lower left corner).&lt;br /&gt;
&lt;br /&gt;
For example if you run the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl -r 5 -s 1 --tile 3105266'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You point to a tile that belongs to the LIME airport area and is approximately equivalent to this command:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 5 -s 1 -l lime&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
In this way it is possible to select any area without having to enter particular coordinates, but only through this number.&lt;br /&gt;
&lt;br /&gt;
===--sexagesimal or -x===&lt;br /&gt;
The angular parameters '''--lon --lat --lonll --latll --lonur --latur''' are normally expressed as hexadecimal. But it often happens that you have the coordinates in ''sexagesimal'' degrees. If the option is inserted, the system converts the decimal part from ''sexagesimal'' to ''centesimal''. For example, if you enter the value of '''52.21''' ''sexagesimal'' degrees, the program will convert them to '''52° 21' N''' which will then be converted to '''52.35''' degree.&lt;br /&gt;
&lt;br /&gt;
'''Note''': ''It is not necessary to use the seconds as the tolerance of the tiles is 1/8 of a degree equal to about 7 minutes.''&lt;br /&gt;
&lt;br /&gt;
For example is possible to write:&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -x -a 52.21 -o 13.30&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
which is equivalent to writing&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl -r 10 -x -a 52.35 -o 13.50&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
If the ''sexagesimal'' degrees are south or east, a minus sign must be entered, the field does not recognize the symbols N, S, E, W typically used in this type of notation.&lt;br /&gt;
&lt;br /&gt;
===--proxy===&lt;br /&gt;
Which allows you to connect with a proxy server, the parameter is used, for example, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 8 photoscenary.jl -s 5 -i &amp;quot;lowi&amp;quot; --over 1 -r 10 '''--proxy &amp;quot;&amp;lt;nowiki&amp;gt;http://192.168.0.9:8118&amp;lt;/nowiki&amp;gt;&amp;quot;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;quot;''&amp;lt;nowiki&amp;gt;http://192.168.0.9:8118&amp;lt;/nowiki&amp;gt;''&amp;quot; is the connection string to the proxy server.&lt;br /&gt;
&lt;br /&gt;
===--debug or -d===&lt;br /&gt;
Currently the program defines two levels of debugging:&lt;br /&gt;
&lt;br /&gt;
* level 1 &amp;lt;code&amp;gt;'''--debug 1'''&amp;lt;/code&amp;gt; adds a series of messages that are a function of the progress of the program, this can be useful when you suspect that the program is not downloading anything or that the network is really slow. The problem is that this option does not display the progress log well and therefore is only useful in special cases.&lt;br /&gt;
&lt;br /&gt;
*level 2 &amp;lt;code&amp;gt;'''--debug 2'''&amp;lt;/code&amp;gt; is also used to display any execution errors. If the system is properly configured they should be rare, but in some cases it is useful to be able to see them.&lt;br /&gt;
&lt;br /&gt;
=== --version===&lt;br /&gt;
It shows the program version and checks all the modules that need to be loaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 10 photoscenary.jl --version'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Photoscenary-version.png|frameless|600x600px]]&lt;br /&gt;
&lt;br /&gt;
=== --help or -h===&lt;br /&gt;
If you type the option -h or --help you get the complete list of options that can be recognized by the program, this list is obtained even if the option we enter or the value is not recognized, this is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;julia photoscenary.jl --help&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;The actiual Julia is 1.7.0-beta3.0 The current version is correct in order to obtain the best performances&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Photoscenary.jl ver: 0.3.5 date: Testing 20210816 System prerequisite test&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Photoscenery generator by Julia compilator,&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Program for uploading Orthophotos files&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25 &amp;lt;nowiki&amp;gt;https://imagemagick.org&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Copyright: (C) 1999-2021 ImageMagick Studio LLC&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;License: &amp;lt;nowiki&amp;gt;https://imagemagick.org/script/license.php&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Features: Cipher DPC Modules OpenMP(4.5)  &amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;ImageMagic is operative!&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;usage: photoscenary.jl [--map MAP] [--latll LATLL] [--lonll LONLL]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--latur LATUR] [--lonur LONUR] [-a LAT]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [-o LON] [-x] [--png] [-i ICAO] [--route ROUTE]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [-t TILE] [-r RADIUS] [-s SIZE] [--sdwn SDWN]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--over OVER] [-p PATH] [--save SAVE]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--connect CONNECT] [--proxy PROXY]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;                      [--attemps ATTEMPS] [-d DEBUG] [--version] [-h]&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;optional arguments:&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;-g, --args ARGS      The arguments files in txt format&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --map MAP            The map server id (type: Int64, default: 1)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --latll LATLL        Lower left area lat (type: Float64, default:  0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --lonll LONLL        Lower left area lon (type: Float64, default:  0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --latur LATUR        Upper right area lat (type: Float64, default: 0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --lonur LONUR        Upper right area lon (type: Float64, default: 0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -a, --lat LAT        Latitude in deg of central point (type: Float64, default: 45.66)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -o, --lon LON        Longitude in deg of central point (type: Float64, default: 9.7)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -x, --sexagesimal    Set the sexagesimal unit degree.minutes&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --png                Set the only png format files&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -i, --icao ICAO      ICAO airport code for extract LAT and LON&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --route ROUTE        Route XML for extract route LAT and LON&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -t, --tile TILE      Tile index es coordinate reference (type: Int64)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -r, --radius RADIUS  Distance Radius around the center point (nm) (type: Float64, default: 0.0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -s, --size SIZE      Max size of image 0-&amp;gt;512 1-&amp;gt;1024 2-&amp;gt;2048 3-&amp;gt;4096 4-&amp;gt;8192 5-&amp;gt;16384 6-&amp;gt;32768 (type: Int64, default: 2)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --sdwn SDWN          Down size with distance (type: Int64, default: 0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --over OVER          Overwrite the tiles: |1|only if bigger resolution |2|for all (type: Int64, default: 0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -p, --path PATH      Path to store the dds images (default: &amp;quot;fgfs-scenery/photoscenery&amp;quot;)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --save SAVE          Save the remove files in the specific path&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;--nosave             Not save the DDS/PNG files&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --connect CONNECT    IP and port FGFS program, example format: &amp;quot;127.0.0.1:5000&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --proxy PROXY        Proxy string ipv4:port for example: &amp;quot;192.168.0.1:8080&amp;quot;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --attemps ATTEMPS    Number of download attempts (type: Int64, default: 3)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -d, --debug DEBUG    Debug level (type: Int64, default: 0)&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; --version            Program version&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;small&amp;gt; -h, --help           show this help message and exit&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Management coverage of tiles on the territory ==&lt;br /&gt;
From version 0.2.8 a more articulated method of managing the loading and distribution of the tiles has been added.&lt;br /&gt;
&lt;br /&gt;
=== Unloading of tiles on the territory assigned with a spiral rule ===&lt;br /&gt;
An algorithm performs the sequence of downloading the tiles as a function of the distance from the center. The download starts from the tiles closest to the center up to the last tiles downloaded which will be the ones farthest from the center.&lt;br /&gt;
&lt;br /&gt;
In this motion it is possible to start the download procedure in parallel with the execution of the Flightgear program.&lt;br /&gt;
&lt;br /&gt;
If you leave the airport where the plane is initially located and use the same airport as the center point (--icao lime for example) during take-off we will already have the tiles of the take-off area and therefore the scenario will appear well covered with orthographic images. During the climb of the plane it will therefore be probable that the following images will always give the pilot the illusion that the territory is well covered with images, even if we are only one part of the work. It will be enough for the pilot, from time to time, to update the scenario with the appropriate Flightgear menu.&lt;br /&gt;
&lt;br /&gt;
=== Database of all orthographic images uploaded in .dds format. ===&lt;br /&gt;
This database is loaded at the beginning of the download session and contains all the images present in the home directory of the user who launched the program.&lt;br /&gt;
&lt;br /&gt;
Before downloading the image from the designated website, the program checks in the database if the requested image is already present in the database, if the image is found in any directory of the home, it is copied to the current path. In this way it is possible to avoid carrying out a download job when the image is already present. Obviously the image must have and the pixel size requirements compatible with those required.&lt;br /&gt;
&lt;br /&gt;
With this technique it is possible to distribute the images also on external supports and then make them converge on a working directory, usually with faster access (for example the system SSD). The only constraint is that the external media has a link that links it to a local folder.&lt;br /&gt;
&lt;br /&gt;
With this technique it is also possible to exploit virtual folders that rely on other repositories, for example those shared with P2P techniques.&lt;br /&gt;
&lt;br /&gt;
This example shows a mixed image download with database support. Images ('''copied''') are images copied from other directories on your system, ('''inserted''') are images inserted after a download from the image distribution web server. The images ('''skip''') are those already present in the folder of the images we are creating.&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 20210606 212142.png|frameless|800x800px]]&lt;br /&gt;
&lt;br /&gt;
== Saving arguments in a text file ==&lt;br /&gt;
[[File:Julia Photoscenery Generator - args file.png|thumb|400x400px|Example of the contents in the '''args.txt''' file]]&lt;br /&gt;
Often the number and length of the arguments can become difficult to manage and therefore it is convenient to be able to save them on a file. For this reason, the '''--args''' (or '''-g''') parameter was introduced followed by a filename to be used as an argument container.&lt;br /&gt;
&lt;br /&gt;
Let's take an example to better understand how this parameter works:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The arguments associated with the launch of the program are: &amp;lt;code&amp;gt;-i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we add the '''--args test.txt''' parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20 --args test.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the directory where we ran the program we will find a new file called test.txt which contains the list of the parameters just entered.&lt;br /&gt;
&lt;br /&gt;
It is now possible to recall the parameters entered using the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl test.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The test.txt file, first created, can be edited with a simple text file editor and then modified according to our needs.&lt;br /&gt;
&lt;br /&gt;
=== Arguments implicit saving ===&lt;br /&gt;
Launching the program with parameters, but without the '''--args''' option, still generates an arguments file called '''args.txt'''&lt;br /&gt;
&lt;br /&gt;
This file can be recalled for the next program run, simply by running the program with no arguments.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The args.txt file is generated and the program, if run without parameters, will search the args.txt file and load it again using the previous parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program runs exactly as in the previous execution.&lt;br /&gt;
&lt;br /&gt;
== Recipes to be able to try the program and live satisfied ==&lt;br /&gt;
There are quite typical configurations that can give a lot of satisfaction to those who want a photorealistic vision, here I give some examples that can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
==== The simplest ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Download the scenario at 2048 pix for a radius of 10 nm with Orio airport (LIME) in the center.''&lt;br /&gt;
&lt;br /&gt;
==== The scenario of the airport closest to you ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''If we live near Innsbruck LOWI is the closest airport.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia photoscenary.jl -i lowi -s 4 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''-i''' followed by the airport abbreviation ICAO, allows you to download that area for a radius of 20 nm ('''-r 20''') and resolution 8K pix ('''-s 4''')''&lt;br /&gt;
&lt;br /&gt;
==== A flight plan has been generated with Skyvector &amp;lt;nowiki&amp;gt;https://skyvector.com/&amp;lt;/nowiki&amp;gt; ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl -s 4 -r 20 --sdwn 1 --over 1 --route &amp;quot;LIMJ.gpx&amp;quot; --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''The area is processed along a route defined with '''[https://skyvector.com/ Skyvector]''' (but the same methodology also applies to the one defined with the FGFS route planner). The program parses the xml file inserted as a parameter of '''--route''' and determines the format.''&lt;br /&gt;
&lt;br /&gt;
==== The scenario is shown along the route ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -r 20 -s 3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''''-t 10''' tells the compiler that it can use up to 10 CPUs, this speeds up the download speed by 2-5 times. '''--connect''' allows you to connect to the Flightgear program (obviously if remote control has been activated (with port 5000) with the launch option of FGFS --telnet = 5000. The parameter '''-s 3''' means that the images will be 4096 pix, a good resolution for flights above 3000 ft.''&lt;br /&gt;
&lt;br /&gt;
==== '''The images are saved for later reuse''' ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 2 --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''--save''' shows the possibility to save the images also in an external drive, in this way it is possible to create collections of images even in the order of TB avoiding using the system disk space.&lt;br /&gt;
&lt;br /&gt;
'''--over 2''' It allows the replacement of images already present in the path directory, even if of higher resolution.&lt;br /&gt;
&lt;br /&gt;
'''The images are saved for later reuse and the operational image directory is defined by the path option.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 10 photoscenary.jl --over 1 --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 3 -r 20&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Generation of tiles along the route with maximum efficiency and quality ====&lt;br /&gt;
If you want to have a high quality scenario along the route, but at the same time light enough to allow the generation of images in good synchronization with the flight, you must enter the option '''--sdwn''' which, [[Julia photoscenery generator#The --sdwn parameter|as explained before]], allows you to automatically reduce the size of the tiles with the distance, in this way if the tile is distant a small tile is downloaded, if instead the tile is close, the downloaded tile is larger , at most the dimensions are those declared with the --s option. In this way it is possible to fly with a fairly synchronized scenario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 --over 1 --sdwn 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you want to get a faster loading of the images that are loaded along the route, remember that the program can overwrite the previous higher resolution images with lower resolution images '''without losing''' the images already downloaded, as they will be inserted in a area outside the scenario (for example a different disk) that can be reached with the path defined with the [[Julia photoscenery generator#--save|--save]] parameter.&lt;br /&gt;
&lt;br /&gt;
This option means that instead of overwriting the images, the program first saves the files, then downloads the images from some external server and then overwrites them. With this technique the overall loading of the images (tiles) is faster as it is useless to download large images of 4-8-16 K pixels placed in distant areas from the pilot's point of view.&lt;br /&gt;
&lt;br /&gt;
Therefore, to minimize the images it is necessary to communicate to the program that it will be able to overwrite the images with the option: [[Julia photoscenery generator#The --over parameter|--over 2]] But since the '''--save''' option is inserted, the program will not delete the previous images, but will insert them in the designated saving areas.&lt;br /&gt;
&lt;br /&gt;
At this point a good command can be this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; '''--save''' &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 '''--over 2''' '''--sdwn 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''However, it must always be remembered that currently FGFS does not reload the images of the scenario automatically, but you must click on the debug menu under reload scenario.''&lt;br /&gt;
&lt;br /&gt;
It is possible to avoid entering the --path and --save commands if you adopt the automatic path search method that is activated with --connect active. This makes the command simpler, but obviously you lose the ability to allocate unused images to a certain area on an explicit directory, this is an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;julia -t 6 photoscenary.jl --connect &amp;quot;127.0.0.1:5000&amp;quot; -s 4 -r 20 '''--over 2''' '''--sdwn 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example of loading multiple scenarios ===&lt;br /&gt;
It is possible to use two sessions of photoscenary.jl at the same time to have an updated low resolution scenario (''obviously this method only makes sense if the route follows a path in which a tiles load has never been performed''). The first session will have a low resolution '''-s 1''' or '''-s 2''' while the second resolution could be much higher, e.g. '''-s 4''' or '''-s 5'''&lt;br /&gt;
&lt;br /&gt;
With this configuration it is very likely that the download speed of the orthophoto server you have selected is sufficient to show the images of the territory at low resolution (''remember that currently FGFS requires the manual scenario update if we want to see the scenario just written''), while the second program proceeds to download the images at a higher resolution which will then be visible only in a second flight, obviously on the same route (''it is very unlikely that from resolutions of '''-s 4''' onwards the images can be downloaded with the same speed with which you fly over the territory'').&lt;br /&gt;
&lt;br /&gt;
In this example I have given '''4 cores''' to the high resolution scenario, and '''3 cores''' to the lower resolution scenario. The number of cores cannot exceed the maximum allowed by your CPU, therefore the program, if this number exceeds the available one, automatically reduces the number of cores.&lt;br /&gt;
&lt;br /&gt;
The presence of the '''--over 1''' parameter is fundamental, which manages the insertion of images according to the resolution. However, remember that the low resolution images that will be replaced will not be deleted if you have entered the '''--save''' parameter with the relative save path.&lt;br /&gt;
&lt;br /&gt;
==== High resolution scenario tasks -s 4 (8K) and -r 10 ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia '''-t 4''' photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; '''-s 4 -r 10 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Low resolution scenario tasks -s 2 (2K) and -r 20 ====&lt;br /&gt;
&amp;lt;code&amp;gt;julia '''-t 3''' photoscenary.jl --path &amp;quot;/media/abassign/test/fgfs-scenery/photoscenery&amp;quot; --save &amp;quot;/media/abassign/save_2018/Salvataggi/Immagini&amp;quot; --connect &amp;quot;127.0.0.1:5000&amp;quot; '''-s 2 -r 20 --over 1'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the generated photo scenery in FlightGear==&lt;br /&gt;
1. Inform FG about additional directory with scenery tiles:&lt;br /&gt;
''--fg-scenery=/your/path/to/photoscenery/directory/''&lt;br /&gt;
either in command line or as extra options in launcher.&lt;br /&gt;
&lt;br /&gt;
E.g. if you have a directory structure like ''C:\FlightGear\fg_customscenery\photoscenery\Orthophotos\e000n40\e007n46'' then use ''--fg-scenery=C:\FlightGear\fg_customscenery\photoscenery''&lt;br /&gt;
&lt;br /&gt;
2. Check the option Menu &amp;gt; View &amp;gt; Rendering Options &amp;gt; Satellite Photoscenery.&lt;br /&gt;
&lt;br /&gt;
== Use the maps generated by photoscenary.jl for professional applications ==&lt;br /&gt;
The photoscenary.jl application allows you to generate maps even only in .png format useful to assemble with gimp (or other painting graphics programs) as the generation of the images guarantees the correct connection. Obviously, reference is made to cylindrical coordinates that must eventually be deformed in case you want to work with a different cartographic model. Currently the program defines the possibility of operating with some image sources defined in the parameter file '''params.xml''' in the sub-section ''&amp;lt;servers&amp;gt; ... &amp;lt;/servers&amp;gt;''. Those that offer the most permissive license conditions are produced by USGS (USA) which is an American federal enete and therefore does not bind which all maps with particular limitations of use, the same rules apply as the otographic images produced by NASA that are used in Flightgear for images of the Earth as seen from space.&lt;br /&gt;
&lt;br /&gt;
If one wants to read the terms of use, he can refer to what is reported in [https://www.usgs.gov/faqs/are-usgs-topographic-maps-copyrighted this USGS link].&lt;br /&gt;
&lt;br /&gt;
=== Download images for professional use or publications ===&lt;br /&gt;
This paragraph is based on the terms of use of the USGS server, so they may not apply to other servers reachable with this program. The server, as you can see by reading the USGS params.xml file, has '''id = 2'''. For use not related to flightgear it is normally useful to work with files in .png format as the .dds is used only for simulation or games. For technical applications a pair of coordinates is normally used which are: Upper right (UR) and Lower Left (LL) of the requested area. You can also find a set of images using polar coordinates and a radius in nautical miles.&lt;br /&gt;
&lt;br /&gt;
Let's now give one examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;'''julia -t 6 photoscenary.jl -s 5 --latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.3 --map 2 &amp;lt;small&amp;gt;--png -p&amp;lt;/small&amp;gt;''' ''&amp;lt;small&amp;gt;'''&amp;quot;'''&amp;lt;/small&amp;gt;'''''&amp;lt;small&amp;gt;/some path/ortho&amp;quot;&amp;lt;/small&amp;gt;'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The coordinates are defined in:&lt;br /&gt;
&lt;br /&gt;
'''-s 5''' is the resolution of the images (s 5 -&amp;gt; 16384 pix for tile)&lt;br /&gt;
&lt;br /&gt;
'''--latll 21.2 --lonll 158.1 --latur 21.5 --lonur -157.3'''&lt;br /&gt;
&lt;br /&gt;
Coordinates in six hundredth degrees.&lt;br /&gt;
&lt;br /&gt;
'''--map 2''' indicates that the images will be downloaded from the USGS server.&lt;br /&gt;
&lt;br /&gt;
'''--png''' means that the images WILL NOT BE CONVERTED to .dds but will remain in .png!&lt;br /&gt;
&lt;br /&gt;
'''-p &amp;quot;''&amp;lt;path&amp;gt;''&amp;quot;''' Defines the path where the images will be downloaded.&lt;br /&gt;
&lt;br /&gt;
'''-x''' If the coordinates are expressed in sexagesimal degrees, just enter this additional parameter, &lt;br /&gt;
&lt;br /&gt;
In this case the decimal part of the coordinate value is in prime, for example:&lt;br /&gt;
&lt;br /&gt;
'''--latll 21.50 --latll 158.50'''&lt;br /&gt;
&lt;br /&gt;
It is equivalent to writing:&lt;br /&gt;
&lt;br /&gt;
'''-x --latll 21.30 --lonll 158.30'''&lt;br /&gt;
&lt;br /&gt;
===Wiki articles===&lt;br /&gt;
*[[Photoscenery]]&lt;br /&gt;
&lt;br /&gt;
===Forum topics===&lt;br /&gt;
*{{forum link|t=39066|title=Photoscenery generator for Julia compiler}} (April 2021 - May 2021)&lt;br /&gt;
*{{forum link|t=38057|title=16k Photoscenery}} (September 2020 - Gen 2021)&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery]]&lt;br /&gt;
[[Category:Scenery software]]&lt;br /&gt;
[[Category:Photoscenery]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Category:Photoscenery&amp;diff=139660</id>
		<title>Category:Photoscenery</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Category:Photoscenery&amp;diff=139660"/>
		<updated>2024-04-13T06:29:31Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: Created page with &amp;quot;Software and articles related to Photoscenery  Category:Scenery software&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Software and articles related to Photoscenery&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery software]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Nasal_library&amp;diff=139646</id>
		<title>Nasal library</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Nasal_library&amp;diff=139646"/>
		<updated>2024-04-09T08:15:45Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* split() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Nasal Navigation|nocat=1}}&lt;br /&gt;
This page documents the global '''library functions and variables''' of FlightGear's built-in scripting language, [[Nasal]]. This includes ''[[#Core library functions|core library functions]]'', which were included in Nasal before its integration into FlightGear, the ''[[#Extension functions|extension functions]]'', which have been subsequently added, and are specifically designed for FlightGear, and the ''[[#variables|global variables]]'', which are conversion variables, added with extension functions, for converting between units. The relevant folders in [[Git]] are:&lt;br /&gt;
* {{flightgear file|src/Scripting}}&lt;br /&gt;
* {{simgear file|simgear/nasal}}&lt;br /&gt;
&lt;br /&gt;
All these functions and variables are in the global namespace, that is, they are directly accessible (e.g., one can call &amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot; inline&amp;gt;magvar()&amp;lt;/syntaxhighlight&amp;gt; instead of &amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot; inline&amp;gt;namespace.magvar()&amp;lt;/syntaxhighlight&amp;gt;). However, if a namespace must be used, &amp;lt;code&amp;gt;globals&amp;lt;/code&amp;gt; is the correct namespace, but using it is not recommended. For a more complete explanation, see [[Nasal Namespaces in-depth]].&lt;br /&gt;
&lt;br /&gt;
{{tip|Copy &amp;amp; paste the examples into your [[Nasal Console]] and execute them to see what they do.|width=70%}}&lt;br /&gt;
&lt;br /&gt;
== Core library functions ==&lt;br /&gt;
This is the list of the basic '''core library functions.''' Most of these functions were part of the original Nasal library (before its integration in to FlightGear), while some have been added or changed over time.  See also:&lt;br /&gt;
* http://plausible.org/nasal/lib.html ([http://web.archive.org/web/20101010094553/http://plausible.org/nasal/lib.html archive])&lt;br /&gt;
* {{simgear file|simgear/nasal/lib.c}} ([http://sourceforge.net/p/flightgear/simgear/ci/next/log/?path=/simgear/nasal/lib.c history])&lt;br /&gt;
&lt;br /&gt;
=== append() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = append(vector, element[, element[, ...]]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=42|t=Source}}&lt;br /&gt;
|text = This function appends, or adds, the given element(s) to the end of the vector given in the first argument.  Returns the vector operated on.&lt;br /&gt;
|param1 = vector&lt;br /&gt;
|param1text = The vector to which the arguments will be appended.&lt;br /&gt;
|param2 = element&lt;br /&gt;
|param2text = An element to be added to the vector.&lt;br /&gt;
|example1 = &lt;br /&gt;
var vector = [1, 2, 3]; # Initialize the vector&lt;br /&gt;
append(vector, 4); # Append the number 4 to the end of the vector&lt;br /&gt;
debug.dump(vector); # Print the contents of the vector&lt;br /&gt;
|example2 = &lt;br /&gt;
var vector = [1, 2, 3]; # Initialize the vector&lt;br /&gt;
append(vector, 4, 5, 6); # Append the numbers 4, 5, and 6 to the end of the vector&lt;br /&gt;
debug.dump(vector); # Print the contents of the vector&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== bind() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = bind(function, locals[, outer_scope]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=502|t=Source}}&lt;br /&gt;
|text = This creates a new function object. A function in Nasal is three things: the actual code, a hash/namespace of local variables available to the function namespace, and the closure object of that namespace. These correspond to the three arguments respectively.&lt;br /&gt;
|param1 = function&lt;br /&gt;
|param1text = Function to evaluate.&lt;br /&gt;
|param2 = locals&lt;br /&gt;
|param2text = Hash containing values that will become the namespace (first closure) for the function.&lt;br /&gt;
|param3 = outer_scope&lt;br /&gt;
|param3text = Optional function which is bound to the next closure. This can be bound to yet another, making a linked list.&lt;br /&gt;
|example1 = # This is a namespace/hash with a single member, named &amp;quot;key,&amp;quot; which is initialized to 12 &lt;br /&gt;
var Namespace = {&lt;br /&gt;
    key: 12&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
# This is different namespace/hash containing a function&lt;br /&gt;
# dividing a variable &amp;quot;key&amp;quot; (which is unavailable/nil in this namespace) by 2&lt;br /&gt;
var AnotherNamespace = {&lt;br /&gt;
    ret: func {&lt;br /&gt;
        key /= 2;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
# To see that key is not available, try to call AnotherNamespace.ret() first&lt;br /&gt;
call(AnotherNamespace.ret, [], nil, nil, var errors = []);&lt;br /&gt;
if(size(errors)){&lt;br /&gt;
    print(&amp;quot;Key could not be divided/resolved!&amp;quot;);&lt;br /&gt;
    debug.printerror(errors);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Associate the AnotherNamespace.ret() function with the first namespace&lt;br /&gt;
# so that &amp;quot;key&amp;quot; is now available&lt;br /&gt;
var function = bind(AnotherNamespace.ret, Namespace);&lt;br /&gt;
&lt;br /&gt;
# Invoke the new function&lt;br /&gt;
function();&lt;br /&gt;
&lt;br /&gt;
# Print out the value of Namespace.key&lt;br /&gt;
# It was changed to 12 from 6 by AnotherNamespace.ret()&lt;br /&gt;
print(Namespace.key);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== call() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = call(func[, args[, me[, locals[, error]]]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=247|t=Source}}&lt;br /&gt;
|text = Calls the given function with the given arguments and returns the result.  This function is very useful as it allows much more control over function calls and catches any errors or {{func link|die()}} calls that would normally trigger run-time errors cancelling execution of the script otherwise. &lt;br /&gt;
|param1 = func&lt;br /&gt;
|param1text = Function to execute.&lt;br /&gt;
|param2 = args&lt;br /&gt;
|param2text = Vector containing arguments to give to the called function.&lt;br /&gt;
|param3 = me&lt;br /&gt;
|param3text = &amp;lt;code&amp;gt;'''me'''&amp;lt;/code&amp;gt; reference for the function call (i.e., for method calls). If given, this will override any &amp;lt;code&amp;gt;'''me'''&amp;lt;/code&amp;gt; value existing in the namespace (locals argument).&lt;br /&gt;
|param4 = locals&lt;br /&gt;
|param4text = A hash with key/value pairs that will be available to the called function, typically used as the namespace for the function to be called.&lt;br /&gt;
|param5 = error&lt;br /&gt;
|param5text = A vector to append errors to.  If the called function generates an error, the error, place, and line will be written to this.  These errors can be printed using {{func link|printerror()|debug}}.&lt;br /&gt;
|example1 =&lt;br /&gt;
# prints &amp;quot;Called from call()&amp;quot;&lt;br /&gt;
call(func {&lt;br /&gt;
    print(&amp;quot;Called from call()&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
|example2 =&lt;br /&gt;
# prints &amp;quot;a = 1 : b = 2&lt;br /&gt;
call(func(a, b){&lt;br /&gt;
        print(&amp;quot;a = &amp;quot;, a, &amp;quot; : b = &amp;quot;, b);&lt;br /&gt;
    },&lt;br /&gt;
    [1, 2]&lt;br /&gt;
);&lt;br /&gt;
|example3 =&lt;br /&gt;
var Hash = {&lt;br /&gt;
    new: func {&lt;br /&gt;
        var m = { parents: [Hash] };&lt;br /&gt;
&lt;br /&gt;
        m.el1 = &amp;quot;string1&amp;quot;;&lt;br /&gt;
        m.el2 = &amp;quot;string2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return m;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
# prints &amp;quot;me.el1 = string1&amp;quot;, then &amp;quot;me.el2 = string2&amp;quot; on the next line&lt;br /&gt;
call(func(a, b){        &lt;br /&gt;
        print(&amp;quot;me.el&amp;quot;, a, &amp;quot; = &amp;quot;, me[&amp;quot;el&amp;quot; ~ a]);      &lt;br /&gt;
        print(&amp;quot;me.el&amp;quot;, b, &amp;quot; = &amp;quot;, me[&amp;quot;el&amp;quot; ~ b]);&lt;br /&gt;
    },&lt;br /&gt;
    [1, 2],&lt;br /&gt;
    Hash.new()&lt;br /&gt;
);&lt;br /&gt;
|example4 =&lt;br /&gt;
# prints the value of math.pi&lt;br /&gt;
call(func {&lt;br /&gt;
        print(pi);&lt;br /&gt;
    }, nil, nil, &lt;br /&gt;
    math&lt;br /&gt;
);&lt;br /&gt;
|example5 =&lt;br /&gt;
call(func {&lt;br /&gt;
        print(math.ip); # math.ip doesn't exist&lt;br /&gt;
    }, nil, nil, nil,&lt;br /&gt;
    var errs = []&lt;br /&gt;
);&lt;br /&gt;
debug.printerror(errs); # The error is caught and printed using debug.printerror()&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== caller() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = caller([level]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=404|t=Source}}&lt;br /&gt;
|text = Returns a vector containing a record from the current call stack.  The level numbering starts from the currently executing function (level 0).  Level 1 (the default) is the caller of the current function, and so on.&lt;br /&gt;
&lt;br /&gt;
The result is a four-element vector containing '''[0]''' a hash of local variables, '''[1]''' the function object, '''[2]''' the full source file name (incl. path) and '''[3]''' the line number. &lt;br /&gt;
|param1 = level&lt;br /&gt;
|param1text = Optional integer specifying the stack level to return a result from.  Defaults to 1 (i.e. the caller of the currently executing function).&lt;br /&gt;
|example1 =&lt;br /&gt;
var myFunction = func(a, b){&lt;br /&gt;
    debug.dump(caller(0)[0]); # prints a hash of local variables, including arguments a and b&lt;br /&gt;
    return 2 * 2;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;2 x 2 = &amp;quot;, myFunction(2, 2));&lt;br /&gt;
|example2 =&lt;br /&gt;
var get_arg_value = func(){&lt;br /&gt;
    print(&amp;quot;Argument to myFunc = &amp;quot;, caller(1)[0]['a']); # print the value of myFunc's single argument, using caller()&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var myFunc = func(a){&lt;br /&gt;
    get_arg_value();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
myFunc(3);&lt;br /&gt;
|example3text = This is a real example taken from {{fgdata file|Nasal/canvas/MapStructure.nas}}.  Function &amp;lt;code&amp;gt;r()&amp;lt;/code&amp;gt; (above the TODOs) returns a hash with the key/value pairs as per its arguments. For example, something like this is returned: &amp;lt;code&amp;gt;{ name: &amp;quot;&amp;lt;name&amp;gt;&amp;quot;, vis: 1, zindex: nil }&amp;lt;/code&amp;gt;.&lt;br /&gt;
|example3 =&lt;br /&gt;
var MapStructure_selfTest = func() {&lt;br /&gt;
	var temp = {};&lt;br /&gt;
	temp.dlg = canvas.Window.new([600,400],&amp;quot;dialog&amp;quot;);&lt;br /&gt;
	temp.canvas = temp.dlg.createCanvas().setColorBackground(1,1,1,0.5);&lt;br /&gt;
	temp.root = temp.canvas.createGroup();&lt;br /&gt;
	var TestMap = temp.root.createChild(&amp;quot;map&amp;quot;);&lt;br /&gt;
	TestMap.setController(&amp;quot;Aircraft position&amp;quot;);&lt;br /&gt;
	TestMap.setRange(25); # TODO: implement zooming/panning via mouse/wheel here, for lack of buttons :-/&lt;br /&gt;
	TestMap.setTranslation(&lt;br /&gt;
		temp.canvas.get(&amp;quot;view[0]&amp;quot;)/2,&lt;br /&gt;
		temp.canvas.get(&amp;quot;view[1]&amp;quot;)/2&lt;br /&gt;
	);&lt;br /&gt;
	var r = func(name,vis=1,zindex=nil) return caller(0)[0];&lt;br /&gt;
	# TODO: we'll need some z-indexing here, right now it's just random&lt;br /&gt;
	# TODO: use foreach/keys to show all layers in this case by traversing SymbolLayer.registry direclty ?&lt;br /&gt;
	# maybe encode implicit z-indexing for each lcontroller ctor call ? - i.e. preferred above/below order ?&lt;br /&gt;
	foreach(var type; [r('TFC',0),r('APT'),r('DME'),r('VOR'),r('NDB'),r('FIX',0),r('RTE'),r('WPT'),r('FLT'),r('WXR'),r('APS'), ] ) &lt;br /&gt;
		TestMap.addLayer(factory: canvas.SymbolLayer, type_arg: type.name,&lt;br /&gt;
					visible: type.vis, priority: type.zindex,&lt;br /&gt;
		);&lt;br /&gt;
}; # MapStructure_selfTest&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== chr() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = chr(code);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=175|t=Source}}&lt;br /&gt;
|text = Returns a character as per the single argument. Extended ASCII is supported (see http://www.asciitable.com/ for a list of supported characters), although this may vary between different systems.  For a list of the most commonly used characters, see the {{wikipedia|ASCII#ASCII printable code chart|ASCII printable code chart}} ('''Dec''' column). The following table lists supported control characters, along with their equivalent control characters in Nasal strings.  {{Note|In Nasal, only strings enclosed with double-quotes (&amp;lt;code&amp;gt;&amp;quot;string&amp;quot;&amp;lt;/code&amp;gt;) supports control chracters.  Strings in single quotes (&amp;lt;code&amp;gt;'string'&amp;lt;/code&amp;gt;) do not.}}&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code !! Name !! Equivalent to&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 10 {{!!}} {{Wikipedia|Newline}} {{!!}} &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 9 {{!!}} {{Wikipedia|Tab key#Tab characters|Horizontal tab}} {{!!}} &amp;lt;code&amp;gt;\t&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 13 {{!!}} {{Wikipedia|Carriage return}} {{!!}} &amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
|param1 = code&lt;br /&gt;
|param1text = Integer character code for the desired glyph.&lt;br /&gt;
|example1 = print(&amp;quot;Code 65 = &amp;quot;, chr(65)); # prints &amp;quot;Code 65 = A&amp;quot;&lt;br /&gt;
|example2text = This example displays all of the characters in a list, in the format &amp;lt;code&amp;gt;Code '''n''' = &amp;gt;'''char'''&amp;lt;&amp;lt;/code&amp;gt;, '''n''' being the index, and '''char''' being the character.&lt;br /&gt;
|example2 =&lt;br /&gt;
for(var i = 0; i &amp;lt;= 255; i += 1){&lt;br /&gt;
    print(&amp;quot;Code &amp;quot;, i, &amp;quot; = &amp;gt;&amp;quot;, chr(i), &amp;quot;&amp;lt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== closure() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = closure(func[, level]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=421|t=Source}}&lt;br /&gt;
|text = Returns the hash table containing the lexical namespace of the given function. The level numbering start with level 0 being the namespace of '''func'''. &lt;br /&gt;
|param1 = func&lt;br /&gt;
|param1text = Function to evaluate.&lt;br /&gt;
|param2 = level&lt;br /&gt;
|param2text = Optional integer specifying the scope level.  Defaults to 0 (the namespace of '''func''').&lt;br /&gt;
|example1 =&lt;br /&gt;
var get_math_e = func {&lt;br /&gt;
    return e; # return the value of math.e&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var myFunction = bind(get_math_e, math); # bind get_math_e to the math namespace, so that math.e is immediately available to get_math_e&lt;br /&gt;
debug.dump(closure(myFunction)); # print the namespace of get_math_e&lt;br /&gt;
&lt;br /&gt;
print(myFunction());&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== cmp() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = cmp(a, b);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=112|t=Source}}&lt;br /&gt;
|text = Compares two strings, returning -1 if '''a''' is less than '''b''', 0 if they are identical and 1 if '''a''' is greater than '''b'''. &lt;br /&gt;
|param1 = a&lt;br /&gt;
|param1text = First string argument for comparison.&lt;br /&gt;
|param2 = b&lt;br /&gt;
|param2text = Second string argument for comparison.&lt;br /&gt;
|example1 = print(cmp(&amp;quot;1&amp;quot;, &amp;quot;two&amp;quot;)); # prints -1&lt;br /&gt;
|example2 = print(cmp(&amp;quot;string&amp;quot;, &amp;quot;string&amp;quot;)); # prints 0&lt;br /&gt;
|example3 = print(cmp(&amp;quot;one&amp;quot;, &amp;quot;2&amp;quot;)); # prints 1&lt;br /&gt;
|example4 = print(cmp(&amp;quot;string1&amp;quot;, &amp;quot;string2&amp;quot;)); # prints -1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== compile() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = compile(code[, filename]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=220|t=Source}}&lt;br /&gt;
|text = Compiles the specified code string and returns a function object bound to the current lexical context.  If there is an error, the function dies, with the argument to {{func link|die()}} being '''filename'''.&lt;br /&gt;
|param1 = code&lt;br /&gt;
|param1text = String containing Nasal code to be compiled.&lt;br /&gt;
|param2 = filename&lt;br /&gt;
|param2text = Optional string used for error messages/logging. Defaults to &amp;lt;code&amp;gt;&amp;lt;compile&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|example1 = &lt;br /&gt;
var myCode = 'print(&amp;quot;hello&amp;quot;);';&lt;br /&gt;
var helloFunc = compile(myCode, &amp;quot;myCode&amp;quot;);&lt;br /&gt;
helloFunc();&lt;br /&gt;
|example2text = &amp;lt;code&amp;gt;compile&amp;lt;/code&amp;gt; is very convenient to support Nasal loaded from other files.  For instance, [[PropertyList XML files]] (such as GUI dialogs) may contain embedded Nasal sections that need to be parsed, processed and compiled.  For an example of how to do this, save the below XML code as &amp;lt;tt&amp;gt;''[[$FG_ROOT]]/gui/dialogs/test.xml''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nasal&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
print(&amp;quot;You have FlightGear v&amp;quot;, getprop(&amp;quot;/sim/version/flightgear&amp;quot;));&lt;br /&gt;
]]&amp;gt;&amp;lt;/nasal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Now, start FlightGear and execute this code in the [[Nasal Console]].&lt;br /&gt;
|example2 =&lt;br /&gt;
# Build the path&lt;br /&gt;
var FGRoot = getprop(&amp;quot;/sim/fg-root&amp;quot;);&lt;br /&gt;
var filename = &amp;quot;/gui/dialogs/test.xml&amp;quot;;&lt;br /&gt;
var path = FGRoot ~ filename;&lt;br /&gt;
&lt;br /&gt;
var blob = io.read_properties(path);&lt;br /&gt;
var script = blob.getValues().nasal; # Get the nasal string&lt;br /&gt;
&lt;br /&gt;
# Compile the script.  We're passing the filename here for better runtime diagnostics &lt;br /&gt;
var code = call(func {&lt;br /&gt;
    compile(script, filename);&lt;br /&gt;
}, nil, nil, var compilation_errors = []);&lt;br /&gt;
&lt;br /&gt;
if(size(compilation_errors)){&lt;br /&gt;
    die(&amp;quot;Error compiling code in: &amp;quot; ~ filename);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Invoke the compiled script, equivalent to code(); &lt;br /&gt;
# We're using call() here to detect errors:&lt;br /&gt;
call(code, [], nil, nil, var runtime_errors = []);&lt;br /&gt;
&lt;br /&gt;
if(size(runtime_errors)){&lt;br /&gt;
    die(&amp;quot;Error calling code compiled loaded from: &amp;quot; ~ filename);&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== contains() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = contains(hash, key);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=184|t=Source}}&lt;br /&gt;
|text = Returns 1 (True) if the hash contains the specified key, or 0 (False) if not.&lt;br /&gt;
|param1 = hash&lt;br /&gt;
|param1text = The hash to search in.&lt;br /&gt;
|param2 = key&lt;br /&gt;
|param2text = The scalar to be searched for, contained as a key in the hash.&lt;br /&gt;
|example1 =&lt;br /&gt;
# Initialize a hash&lt;br /&gt;
var hash = {&lt;br /&gt;
    element: &amp;quot;value&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
print(contains(hash, &amp;quot;element&amp;quot;) ? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;); # This will print &amp;quot;Yes&amp;quot;&lt;br /&gt;
|example2 =&lt;br /&gt;
# Initialize a hash&lt;br /&gt;
var hash = {&lt;br /&gt;
    element: &amp;quot;value&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
print(contains(hash, &amp;quot;element2&amp;quot;) ? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;); # This will print &amp;quot;No&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===contains()===&lt;br /&gt;
{{Requires commit|desc=Vector support|details=see {{Merge-request|project=fgdata|id=305}}|commit=ee39abbd3b70c9b6d5e3a1c4ccedddaac1a92b11|repo=Simgear}}&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = contains(vector, item);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=184|t=Source}}&lt;br /&gt;
|text = Returns 1 (True) if the vector contains the specified item, or 0 (False) if not.&lt;br /&gt;
|param1 = vector&lt;br /&gt;
|param1text = The vector to search in.&lt;br /&gt;
|param2 = item&lt;br /&gt;
|param2text = The object to be searched for in the vector.&lt;br /&gt;
|example1 =&lt;br /&gt;
# Initialize a hash&lt;br /&gt;
var vec = [&amp;quot;element&amp;quot;, &amp;quot;foo&amp;quot;];&lt;br /&gt;
print(contains(vec, &amp;quot;element&amp;quot;) ? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;); # This will print &amp;quot;Yes&amp;quot;&lt;br /&gt;
|example2 =&lt;br /&gt;
# Initialize a hash&lt;br /&gt;
var vec = [&amp;quot;element&amp;quot;, &amp;quot;foo&amp;quot;];&lt;br /&gt;
print(contains(vec, &amp;quot;element2&amp;quot;) ? &amp;quot;Yes&amp;quot; : &amp;quot;No&amp;quot;); # This will print &amp;quot;No&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===delete() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = delete(hash, key);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=83|t=Source}}&lt;br /&gt;
|text = Deletes the key from the hash if it exists. Operationally, this is NOT identical to setting the hash value specified by the key to &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; as the key will stay in the hash (at least for a while). This variant potentially frees storage by deleting the reference to the key and by shrinking the hash.  Returns the hash that has been operated on.&lt;br /&gt;
|param1 = hash&lt;br /&gt;
|param1text = The hash from which to delete the key.&lt;br /&gt;
|param2 = key&lt;br /&gt;
|param2text = The scalar to be deleted, contained as a key in the hash.&lt;br /&gt;
|example1 =&lt;br /&gt;
# Initialize the hash&lt;br /&gt;
var hash = {&lt;br /&gt;
    element1: &amp;quot;value1&amp;quot;,&lt;br /&gt;
    element2: &amp;quot;value2&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
delete(hash, &amp;quot;element1&amp;quot;); # Delete element1&lt;br /&gt;
debug.dump(hash); # prints the hash, which is now minus element1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===die()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = die(error);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=288|t=Source}}&lt;br /&gt;
|text = Terminates execution and unwinds the stack.  The place and the line will be added to the '''error'''.  This invokes the same internal exception handler used for internal runtime errors. Use this to signal fatal errors, or to implement exception handling. The error thrown (including internal runtime errors) can be caught with {{func link|call()}}.&lt;br /&gt;
|param1 = error&lt;br /&gt;
|param1text = String describing the error.&lt;br /&gt;
:{{inote|This parameter is technically optional, but it is highly recommended to use it.}}&lt;br /&gt;
|example1 = &lt;br /&gt;
print(&amp;quot;Will print&amp;quot;);&lt;br /&gt;
die(&amp;quot;Don't go any further!&amp;quot;); &lt;br /&gt;
print(&amp;quot;Won't print&amp;quot;); # Will not be printed because die() stops the process&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== find()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = find(needle, haystack);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=450|t=Source}}&lt;br /&gt;
|text = Finds and returns the index of the first occurrence of the string '''needle''' in the string '''haystack''', or -1 if no such occurrence was found.&lt;br /&gt;
|param1 = needle&lt;br /&gt;
|param1text = String to search for.&lt;br /&gt;
|param2 = haystack&lt;br /&gt;
|param2text = String to search in.&lt;br /&gt;
|example1 = print(find(&amp;quot;c&amp;quot;, &amp;quot;abcdef&amp;quot;)); # prints 2&lt;br /&gt;
|example2 = print(find(&amp;quot;x&amp;quot;, &amp;quot;abcdef&amp;quot;)); # prints -1&lt;br /&gt;
|example3 = print(find(&amp;quot;cd&amp;quot;, &amp;quot;abcdef&amp;quot;)); # prints 2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===ghosttype()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = ghosttype(ghost);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=207|t=Source}}&lt;br /&gt;
|text = Returns a string containing either a descriptive name of a ghost (a raw C/C++ object), or a unique id (the pointer to the C/C++ &amp;lt;code&amp;gt;naGhostType&amp;lt;/code&amp;gt; instance) if no name has been set.  Ghost is an acronym that stands for '''G'''arbage-collected '''H'''andle to '''O'''ut'''S'''ide '''T'''hingy.&lt;br /&gt;
|param1 = ghost&lt;br /&gt;
|param1text = Ghost to return a description for.&lt;br /&gt;
|example1 = print(ghosttype(airportinfo())); # prints &amp;quot;airport&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===id()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = id(object);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=570|t=Source}}&lt;br /&gt;
|text = Returns a string containing information on the type and ID of the object provided in the single argument.  The information is returned in the form of &amp;lt;code&amp;gt;'''&amp;lt;type&amp;gt;''':'''&amp;lt;id&amp;gt;'''&amp;lt;/code&amp;gt;, where '''&amp;lt;type&amp;gt;''' is the type of object, and '''&amp;lt;id&amp;gt;''' is the ID.&lt;br /&gt;
|param1 = object&lt;br /&gt;
|param1text = Can be either of a string, a vector, a hash, a code, a function, or a ghost.&lt;br /&gt;
|example1 = print(id(&amp;quot;A&amp;quot;)); # prints &amp;quot;str:000000001624A590&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===int() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = int(number);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=90|t=Source}}&lt;br /&gt;
|text = Returns the integer part of the numeric value of the single argument, or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; if none exists.&lt;br /&gt;
|param1 = number&lt;br /&gt;
|param1text = Number or string with just a number in it to return an integer from.&lt;br /&gt;
|example1 = print(int(23)); # prints &amp;quot;23&amp;quot;&lt;br /&gt;
|example2 = print(int(23.123)); # prints &amp;quot;23&amp;quot;&lt;br /&gt;
|example3 = debug.dump(int(&amp;quot;string&amp;quot;)); # prints &amp;quot;nil&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===keys()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = keys(hash);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=33|t=Source}}&lt;br /&gt;
|text = Returns a vector containing the list of keys found in the single hash argument. &lt;br /&gt;
|param1 = hash&lt;br /&gt;
|param1text = The hash to return the keys from.&lt;br /&gt;
|example1 = &lt;br /&gt;
# Initialize a hash&lt;br /&gt;
var hash = {&lt;br /&gt;
    element1: &amp;quot;value&amp;quot;,&lt;br /&gt;
    element2: &amp;quot;value&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
debug.dump(keys(hash)); # print the vector&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===left()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = left(string, length);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=149|t=Source}}&lt;br /&gt;
|version = 2.12&lt;br /&gt;
|commit = {{simgear commit|bd7163|t=commit}}&lt;br /&gt;
|text = Returns a substring of '''string''', starting from the left.&lt;br /&gt;
|param1 = string&lt;br /&gt;
|param1text = String to return part of.&lt;br /&gt;
|param2 = length&lt;br /&gt;
|param2text = Integer specifying the length of the substring to return.&lt;br /&gt;
|example1 = print(left(&amp;quot;string&amp;quot;, 2)); # prints &amp;quot;st&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== num()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = num(number);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=102|t=Source}}&lt;br /&gt;
|text = Returns the numerical value of the single string argument, or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; if none exists. &lt;br /&gt;
|param1 = number&lt;br /&gt;
|param1text = String with just a number in it to return a number from.&lt;br /&gt;
|example1 = print(num(&amp;quot;23&amp;quot;)); # prints &amp;quot;23&amp;quot;&lt;br /&gt;
|example2 = print(num(&amp;quot;23.123&amp;quot;)); # prints &amp;quot;23.123&amp;quot;&lt;br /&gt;
|example3 = debug.dump(num(&amp;quot;string&amp;quot;)); # prints &amp;quot;nil&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===pop()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = pop(vector);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=50|t=Source}}&lt;br /&gt;
|text = Removes and returns the last element of the single vector argument, or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; if the vector is empty. &lt;br /&gt;
|param1 = vector&lt;br /&gt;
|param1text = Vector to remove an element from.&lt;br /&gt;
|example1 = &lt;br /&gt;
var vector = [1, 2, 3];&lt;br /&gt;
pop(vector);&lt;br /&gt;
debug.dump(vector); # prints &amp;quot;[1, 2]&amp;quot;&lt;br /&gt;
|example2 = &lt;br /&gt;
var vector = [1, 2, 3];&lt;br /&gt;
debug.dump(pop(vector)); # prints &amp;quot;3&amp;quot;&lt;br /&gt;
|example3 = &lt;br /&gt;
var vector = [];&lt;br /&gt;
debug.dump(pop(vector)); # prints &amp;quot;nil&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===right()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = right(string, length);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=161|t=Source}}&lt;br /&gt;
|version = 2.12&lt;br /&gt;
|commit = {{simgear commit|bd7163|t=commit}}&lt;br /&gt;
|text = Returns a substring of '''string''', starting from the right.&lt;br /&gt;
|param1 = string&lt;br /&gt;
|param1text = String to return part of.&lt;br /&gt;
|param2 = length&lt;br /&gt;
|param2text = Integer specifying the length of the substring to return.&lt;br /&gt;
|example1 = print(right(&amp;quot;string&amp;quot;, 2)); # prints &amp;quot;ng&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== setsize()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = setsize(vector, size);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=56|t=Source}}&lt;br /&gt;
|text = Sets the size of a vector. The first argument specifies a vector, the second a number representing the desired size of that vector. If the vector is currently larger than the specified size, it is truncated. If it is smaller, it is padded with &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; entries. Returns the vector operated upon. &lt;br /&gt;
|param1 = vector&lt;br /&gt;
|param1text = The vector to be operated on.&lt;br /&gt;
|param2 = size&lt;br /&gt;
|param2text = The desired size of the vector in number of entries.&lt;br /&gt;
|example1 = &lt;br /&gt;
var vector = [1, 2, 3]; # Initialize a vector&lt;br /&gt;
setsize(vector, 4);&lt;br /&gt;
debug.dump(vector); # print the vector&lt;br /&gt;
|example2 = &lt;br /&gt;
var vector = [1, 2, 3]; # Initialize a vector&lt;br /&gt;
setsize(vector, 2);&lt;br /&gt;
debug.dump(vector); # print the vector&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===size()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = size(object);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=23|t=Source}}&lt;br /&gt;
|text = Returns the size of the single argument. For strings, this is the length in bytes. For vectors, this is the number of elements. For hashes, it is the number of key/value pairs. If the argument is &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; or a number, this error will be thrown: &amp;lt;code&amp;gt;object has no size()&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param1 = object&lt;br /&gt;
|param1text = Object to find the size of.  Must be a string, a vector or a hash.&lt;br /&gt;
|example1 = &lt;br /&gt;
var string = &amp;quot;string&amp;quot;;&lt;br /&gt;
print(size(string)); # prints &amp;quot;6&amp;quot;&lt;br /&gt;
|example2 =&lt;br /&gt;
var vector = [1, 2, 3];&lt;br /&gt;
print(size(vector)); # prints &amp;quot;3&amp;quot;&lt;br /&gt;
|example3 =&lt;br /&gt;
var hash = {&lt;br /&gt;
    element1: &amp;quot;value1&amp;quot;,&lt;br /&gt;
    element2: &amp;quot;value2&amp;quot;,&lt;br /&gt;
    element3: &amp;quot;value3&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
print(size(hash)); # prints &amp;quot;3&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== sort()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = sort(vector, function);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=542|t=Source}}&lt;br /&gt;
|text = Returns a vector containing the elements in the input '''vector''' sorted in according to the rule given by '''function'''. Implemented with the ANSI C {{func link|qsort()|link=http://www.cplusplus.com/reference/cstdlib/qsort/}}, &amp;lt;code&amp;gt;sort()&amp;lt;/code&amp;gt; is stable.  This means that if the rules in the first example are used, equal elements in the output vector will appear in the same relative order as they do in the input.  It is run in a loop, so '''function''' is run several times.&lt;br /&gt;
|param1 = vector&lt;br /&gt;
|param1text = Input vector to sort.&lt;br /&gt;
|param2 = function&lt;br /&gt;
|param2text = Function according to which the elements will be sorted by.  It should take two arguments and should return one of 1, 0, or -1.&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Return value !! Meaning&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} less than 0 {{!!}} first argument should go before second argument&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 0 {{!!}} first argument equals second argument&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} greater than 0 {{!!}} first argument should go after second argument&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
|example1text = This example sorts elements from smallest to greatest.&lt;br /&gt;
|example1 = &lt;br /&gt;
var sort_rules = func(a, b){&lt;br /&gt;
    if(a &amp;lt; b){&lt;br /&gt;
        return -1; # A should before b in the returned vector&lt;br /&gt;
    }elsif(a == b){&lt;br /&gt;
        return 0; # A is equivalent to b &lt;br /&gt;
    }else{&lt;br /&gt;
        return 1; # A should after b in the returned vector&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
debug.dump(sort([3, 2, 5, 6, 4, 1], sort_rules)); # prints &amp;quot;[1, 2, 3, 4, 5, 6]&amp;quot;&lt;br /&gt;
|example2text = This example sorts elements from greatest to smallest.&lt;br /&gt;
|example2 = &lt;br /&gt;
# Outputs the elements in reverse order (greatest to smallest)&lt;br /&gt;
var sort_rules = func(a, b){&lt;br /&gt;
    if(a &amp;lt; b){&lt;br /&gt;
        return 1; # -1 in the above example&lt;br /&gt;
    }elsif(a == b){&lt;br /&gt;
        return 0;&lt;br /&gt;
    }else{&lt;br /&gt;
        return -1; # 1 in the above example&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
debug.dump(sort([3, 2, 5, 6, 4, 1], sort_rules)); # prints &amp;quot;[6, 5, 4, 3, 2, 1]&amp;quot;&lt;br /&gt;
|example3text = This example sorts a vector of strings (runways for example) from smallest to greatest.&lt;br /&gt;
|example3 = &lt;br /&gt;
var runways = [&amp;quot;09R&amp;quot;,&amp;quot;27R&amp;quot;,&amp;quot;26L&amp;quot;,&amp;quot;09L&amp;quot;,&amp;quot;15&amp;quot;];&lt;br /&gt;
var rwy = sort(runways,func(a,b) cmp(a,b));&lt;br /&gt;
debug.dump(rwy); # prints ['09L','09R','15','26L','27R']&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== split()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = split(delimiter, string);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=460|t=Source}}&lt;br /&gt;
|text = Splits the input string into a vector of substrings bounded by occurrences of the delimiter substring. See [[Nasal_library/string#string.join(sep,list)|string.join()]].&lt;br /&gt;
|param1 = delimiter&lt;br /&gt;
|param1text = String that will split the substrings in the returned vector.&lt;br /&gt;
|param2 = string&lt;br /&gt;
|param2text = String to split up.&lt;br /&gt;
|example1 = debug.dump(split(&amp;quot;cd&amp;quot;, &amp;quot;abcdef&amp;quot;)); # prints &amp;quot;['ab', 'ef']&amp;quot;&lt;br /&gt;
|example2 = debug.dump(split(&amp;quot;.&amp;quot;, &amp;quot;3.2.0&amp;quot;)); # prints &amp;quot;[3, 2, 0]&amp;quot;&lt;br /&gt;
|example3 = debug.dump(split(&amp;quot;/&amp;quot;, &amp;quot;path/to/file&amp;quot;)); # prints &amp;quot;['path', 'to', 'file']&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===sprintf()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;sprintf(format[, arg[, arg, [...]]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=355|t=Source}}&lt;br /&gt;
|text = Creates and returns a string formatted using ANSI C {{func link|vsnprintf()|link=http://en.cppreference.com/w/c/io/vfprintf}} &amp;lt;ref&amp;gt;&lt;br /&gt;
{{Cite web&lt;br /&gt;
|url = http://sourceforge.net/p/flightgear/simgear/ci/next/tree/simgear/nasal/lib.c#l308&lt;br /&gt;
|title = fgdata/simgear/simgear/nasal/lib.c, line 308&lt;br /&gt;
|accessdate = October 2015&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;.  Below is a table of supported format specifiers.&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot; width=&amp;quot;75%&amp;quot;&lt;br /&gt;
{{!}}+ %[flags][width][.precision]specifier&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Flags&lt;br /&gt;
{{!-}}&lt;br /&gt;
! Flag !! Output&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; {{!!}} Forces to precede the result with a plus or minus sign ('''+''' or '''-''') even for positive numbers. By default, only negative numbers are preceded with a '''-''' sign.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} ''space'' {{!!}} Prefixes non-signed numbers with a space.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; {{!!}} Left-align the output of this placeholder (the default is to right-align the output) when the width option is specified.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; {{!!}} Use 0 instead of spaces to pad a field when the width option is specified.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; {{!!}} Used with &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; specifiers the value is preceded with &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;0X&amp;lt;/tt&amp;gt; respectively for values different than zero. Used with &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;, it forces the written output to contain a decimal point even if no digits would follow. By default, if no digits follow, no decimal point is written. Used with &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt; the result is the same as with &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt; but trailing zeros are not removed.&lt;br /&gt;
{{!-}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Width&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}} Integer specifying the minimum number of characters to be returned. This includes the decimal point and decimal fraction as well as + or - signs.&lt;br /&gt;
{{!-}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Precision&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; {{!}} Integer preceded by a dot specifying the number of decimal places to be written.&lt;br /&gt;
{{!-}}&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; {{!}} Specifiers&lt;br /&gt;
{{!-}}&lt;br /&gt;
! Specifier !! Output&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; {{!!}} Signed decimal number.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; {{!!}} A string&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; {{!!}} Percent (%) character.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; {{!!}} A single character assigned to a character code, the code given in an integer argument.  See http://www.asciitable.com/ for a list of supported characters and their codes.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt; {{!!}} Unsigned integer as an octal number.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;u&amp;lt;/code&amp;gt; {{!!}} Unsigned decimal integer.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; {{!!}} Unsigned integer as a hexadecimal number.  If &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; is used, any letters in the number are lowercase, while &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; gives uppercase.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt; {{!!}} Double value in scientific notation (i.e., ''[-]ddd.ddd'''e'''[+/-]ddd''), with an exponent being denoted by &amp;lt;tt&amp;gt;e&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;E&amp;lt;/tt&amp;gt; depending on whether an upper or lowercase is used respectively.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; {{!!}} Floating-point number, in fixed decimal notation, by default with 6 decimal places.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt; {{!!}} Appears to be available&amp;lt;ref&amp;gt;&lt;br /&gt;
{{Cite web&lt;br /&gt;
|url = http://sourceforge.net/p/flightgear/simgear/ci/next/tree/simgear/nasal/lib.c#l389&lt;br /&gt;
|title = fgdata/simgear/simgear/nasal/lib.c, line 389&lt;br /&gt;
|accessdate = October 2015&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;, but doesn't work.&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt; {{!!}} Double in either normal or exponential notation, whichever is more appropriate for its magnitude. &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt; uses lower-case letters, &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt; uses upper-case letters. This type differs slightly from fixed-point notation in that insignificant zeroes to the right of the decimal point are not included.  Also, the decimal point is not included on whole numbers.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
|param1 = format&lt;br /&gt;
|param1text = String specifying the format.  Can be used with or without a format specifiers.  See below for examples.&lt;br /&gt;
|param2 = arg&lt;br /&gt;
|param2text = Argument specifying a value to replace a format placeholder (such as &amp;lt;code&amp;gt;%d&amp;lt;/code&amp;gt;) in the format string.  Not required if there are no format specifiers.&lt;br /&gt;
&lt;br /&gt;
|example1 = print(sprintf(&amp;quot;%i&amp;quot;, 54)); # prints &amp;quot;54&amp;quot;&lt;br /&gt;
|example2 = print(sprintf(&amp;quot;Pi = %+.10f&amp;quot;, math.pi)); # prints &amp;quot;Pi = +3.1415926536&amp;quot;&lt;br /&gt;
|example3 = &lt;br /&gt;
print(sprintf(&amp;quot;%6d&amp;quot;, 23)); # prints &amp;quot;    23&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;%06d&amp;quot;, 23)); # prints &amp;quot;000023&amp;quot;&lt;br /&gt;
|example4 =&lt;br /&gt;
var FGVer = getprop(&amp;quot;/sim/version/flightgear&amp;quot;);&lt;br /&gt;
print(sprintf(&amp;quot;You have FlightGear v%s&amp;quot;, FGVer)); # prints &amp;quot;You have FlightGear v&amp;lt;your version&amp;gt;&amp;quot;&lt;br /&gt;
|example5 = &lt;br /&gt;
print(sprintf(&amp;quot;Hexadecimal 100000 = %X&amp;quot;, 100000)); # prints &amp;quot;Hexadecimal 100000 = 186A0&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;Hexadecimal 100000 = %x&amp;quot;, 100000)); # prints &amp;quot;Hexadecimal 100000 = 186a0&amp;quot;&lt;br /&gt;
|example6 = print(sprintf(&amp;quot;Code 65 is %c&amp;quot;, 65)); # prints &amp;quot;Code 65 is A&amp;quot;&lt;br /&gt;
|example7 = &lt;br /&gt;
print(sprintf(&amp;quot;%e&amp;quot;, 54)); # prints &amp;quot;5.400000e+001&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;%E&amp;quot;, 54)); # prints &amp;quot;5.400000E+001&amp;quot;&lt;br /&gt;
|example8 = print(sprintf(&amp;quot;%o&amp;quot;, 54)); # prints &amp;quot;66&amp;quot;&lt;br /&gt;
|example9 = print(sprintf(&amp;quot;50%% of 100 is %i&amp;quot;, 100 / 2)); # prints &amp;quot;50% of 100 is 50&amp;quot;&lt;br /&gt;
|example10 =&lt;br /&gt;
print(sprintf(&amp;quot;%.2f&amp;quot;, 1.4));   #prints &amp;quot;1.40&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;%.1f&amp;quot;, 1.4));   #prints &amp;quot;1.4&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;% 4.1f&amp;quot;, 1.4)); #prints &amp;quot; 1.4&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;%04.1f&amp;quot;, 1.4)); #prints &amp;quot;01.4&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;% 6.1f&amp;quot;, 1.4)); #prints &amp;quot;   1.4&amp;quot;&lt;br /&gt;
print(sprintf(&amp;quot;%06.1f&amp;quot;, 1.4)); #prints &amp;quot;0001.4&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===streq()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = streq(a, b);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=129|t=Source}}&lt;br /&gt;
|text = Tests the string values of the two arguments for equality. This function is needed because the &amp;lt;code&amp;gt;'''=='''&amp;lt;/code&amp;gt; operator (see [[Nasal_Operators#Equality|Nasal Operators]]) tests for numeric equality first.  If either or both the arguments are not strings, 0 (False) will be returned.  Returns either 0 (False) or 1 (True).  {{Note|This function is rarely required in typical code.}}&lt;br /&gt;
|param1 = a&lt;br /&gt;
|param1text = First argument for testing equality.&lt;br /&gt;
|param2 = b&lt;br /&gt;
|param2text = Second argument for testing equality.&lt;br /&gt;
|example1 = print(streq(&amp;quot;0&amp;quot;, &amp;quot;0&amp;quot;)); # prints &amp;quot;1&amp;quot; (True)&lt;br /&gt;
|example2 = &lt;br /&gt;
print(0 == 0.0); # prints &amp;quot;1&amp;quot; (True)&lt;br /&gt;
print(streq(&amp;quot;0&amp;quot;, &amp;quot;0.0&amp;quot;)); # prints &amp;quot;0&amp;quot; (False)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===substr()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = substr(string, start [, length]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=129|t=Source}}&lt;br /&gt;
|text = Similar the {{func link|subvec()}}, but operates on strings. Computes and returns a substring. The first argument specifies a string, the second is the index of the start of a substring, the optional third argument specifies a length (the default is to return the rest of the string from the start).&lt;br /&gt;
|param1 = string&lt;br /&gt;
|param1text = String to return a substring from.&lt;br /&gt;
|param2 = start&lt;br /&gt;
|param2text = Integer specifying the start of a substring. Negative values specify a position from the end of the string.&lt;br /&gt;
|param3 = length&lt;br /&gt;
|param3text = Optional argument specifying the length of the substring. Defaults to the end of the string.&lt;br /&gt;
|example1 = print(substr(&amp;quot;abcde&amp;quot;, 1, 3)); # prints &amp;quot;bcd&amp;quot;&lt;br /&gt;
|example2 = print(substr(&amp;quot;abcde&amp;quot;, 1)); # prints &amp;quot;bcde&amp;quot;&lt;br /&gt;
|example3 = print(substr(&amp;quot;abcde&amp;quot;, 2, 1)); # prints &amp;quot;c&amp;quot;&lt;br /&gt;
|example4 = print(substr(&amp;quot;abcde&amp;quot;, -2)); # prints &amp;quot;de&amp;quot;&lt;br /&gt;
|example5 = print(substr(&amp;quot;abcde&amp;quot;, -3, 2)); # prints &amp;quot;cd&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===subvec()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = subvec(vector, start[, length]);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=63|t=Source}}&lt;br /&gt;
|text = Returns a sub-range of a vector. The first argument specifies a vector, the second a starting index, and the optional third argument indicates a length (the default is to the end of the vector). &lt;br /&gt;
|param1 = vector&lt;br /&gt;
|param1text = The vector to take the sub-vector from.&lt;br /&gt;
|param2 = start&lt;br /&gt;
|param2text = The starting point of the sub-vector within the given vector.&lt;br /&gt;
|param3 = length&lt;br /&gt;
|param3text = Optional argument specifying the length of the sub-vector, from the starting point.&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Omitting the ''vector'' and ''start'' arguments is not an error (possibly it should be) but the return value is ''nil''.&lt;br /&gt;
* A negative ''start'' argument ''is'' an error. This seems wrong. Perhaps the language designer could comment.&lt;br /&gt;
* A value of ''start'' greater than ''size(vector)'' causes an error. A value equal to ''size(vector)'' returns an empty vector.&lt;br /&gt;
* If the value of ''length'' is greater than ''size(vector) - start'' then it is ignored. That is, all elements from ''start'' to the end of ''vector'' are returned. If ''length'' is zero then an empty vector is returned. A negative value of ''length'' causes an error.&lt;br /&gt;
|example1 = &lt;br /&gt;
var vector = [1, 2, 3];&lt;br /&gt;
debug.dump(subvec(vector, 0)); # prints &amp;quot;[1, 2, 3]&amp;quot;&lt;br /&gt;
|example2 = &lt;br /&gt;
var vector = [1, 2, 3];&lt;br /&gt;
debug.dump(subvec(vector, 1)); # prints &amp;quot;[2, 3]&amp;quot;&lt;br /&gt;
|example3 = &lt;br /&gt;
var vector = [1, 2, 3];&lt;br /&gt;
debug.dump(subvec(vector, 1, 1)); # prints &amp;quot;[2]&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== typeof()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = typeof(object);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|l=193|t=Source}}&lt;br /&gt;
|text = Returns a string indicating the whether the object is &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt;, a scalar (number or string), a vector, a hash, a function, or a ghost.&lt;br /&gt;
|param1 = object&lt;br /&gt;
|param1text = Object to return the type of.&lt;br /&gt;
|example1 = &lt;br /&gt;
var object = nil;&lt;br /&gt;
print(typeof(object)); # prints &amp;quot;nil&amp;quot;&lt;br /&gt;
|example2 = &lt;br /&gt;
var object = &amp;quot;Hello world!&amp;quot;;&lt;br /&gt;
print(typeof(object)); # prints &amp;quot;scalar&amp;quot;&lt;br /&gt;
|example3 = &lt;br /&gt;
var object = math.pi;&lt;br /&gt;
print(typeof(object)); # prints &amp;quot;scalar&amp;quot;&lt;br /&gt;
|example4 = &lt;br /&gt;
var object = [1, 2, 3];&lt;br /&gt;
print(typeof(object)); # prints &amp;quot;vector&amp;quot;&lt;br /&gt;
|example5 = &lt;br /&gt;
var object = {};&lt;br /&gt;
print(typeof(object)); # prints &amp;quot;hash&amp;quot;&lt;br /&gt;
|example6 = &lt;br /&gt;
var object = func {};&lt;br /&gt;
print(typeof(object)); # prints &amp;quot;func&amp;quot;&lt;br /&gt;
|example7 =&lt;br /&gt;
var object = airportinfo();&lt;br /&gt;
print(typeof(object)); # prints &amp;quot;ghost&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- == Extension modules ==&lt;br /&gt;
=== thread ===&lt;br /&gt;
{{WIP}}&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thread.newthread(func);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/threadlib.c|l=101|t=Source}}&lt;br /&gt;
|text = &lt;br /&gt;
|example1text = start a new worker thread&lt;br /&gt;
|example1 = thread.newthread( func() {} );&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thread.newlock();&lt;br /&gt;
|source = {{simgear file|simgear/nasal/threadlib.c|l=101|t=Source}}&lt;br /&gt;
|text = &lt;br /&gt;
|example1text = create a new lock&lt;br /&gt;
|example1 = var lock = thread.newlock()&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thread.lock();&lt;br /&gt;
|source = {{simgear file|simgear/nasal/threadlib.c|l=101|t=Source}}&lt;br /&gt;
|text = &lt;br /&gt;
|example1text = lock a lock&lt;br /&gt;
|example1 = var lock = thread.newlock()&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thread.unlock();&lt;br /&gt;
|source = {{simgear file|simgear/nasal/threadlib.c|l=101|t=Source}}&lt;br /&gt;
|text = &lt;br /&gt;
|example1text = unlock a lock&lt;br /&gt;
|example1 = var lock = thread.unlock()&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thread.newsem();&lt;br /&gt;
|source = {{simgear file|simgear/nasal/threadlib.c|l=101|t=Source}}&lt;br /&gt;
|text = &lt;br /&gt;
|example1text = create a new {{Wikipedia|semaphore}}&lt;br /&gt;
|example1 = var semaphore = thread.newsem()&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thread.semdown();&lt;br /&gt;
|source = {{simgear file|simgear/nasal/threadlib.c|l=101|t=Source}}&lt;br /&gt;
|text = &lt;br /&gt;
|example1text = semaphore down&lt;br /&gt;
|example1 = thread.semdown(semaphore)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thread.semup();&lt;br /&gt;
|source = {{simgear file|simgear/nasal/threadlib.c|l=101|t=Source}}&lt;br /&gt;
|text = &lt;br /&gt;
|example1text = semaphore up&lt;br /&gt;
|example1 = thread.semup(semaphore)&lt;br /&gt;
}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Extension functions==&lt;br /&gt;
The '''extension functions''' are global functions that have been added to Nasal since its integration into FlightGear. Unlike the core library functions, they are generally specifically designed to interact directly with FlightGear. Extension functions come from three source files:&lt;br /&gt;
*{{flightgear file|src/Scripting/NasalPositioned.cxx}}&lt;br /&gt;
*{{flightgear file|src/Scripting/NasalSys.cxx}}&lt;br /&gt;
*{{fgdata file|Nasal/globals.nas}}&lt;br /&gt;
&lt;br /&gt;
===abort()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = abort();&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=565|t=Source}}&lt;br /&gt;
|text = This function is a wrapper for the C++ {{func link|abort()|link=http://www.cplusplus.com/reference/cstdlib/abort/}} function. It simply aborts FlightGear with an error, which varies depending on the operating system. This function should not really be used; instead, please use the &amp;quot;exit&amp;quot; [[Fgcommands|fgcommand]], which will exit FlightGear more gracefully (see example below).&lt;br /&gt;
|example1text = This example will immediately stop FlightGear with an error, such as &amp;quot;FlightGear has stopped working.&amp;quot;&lt;br /&gt;
|example1 = abort();&lt;br /&gt;
|example2text = For exiting FlightGear in a better way, please use the following code:&lt;br /&gt;
|example2 = fgcommand(&amp;quot;exit&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== abs() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = abs(number);&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|text = This simple function returns the {{wikipedia|absolute value|noicon=1}} of the provided number.&lt;br /&gt;
|param1 = number&lt;br /&gt;
|param1text = This argument is required and should be a number.&lt;br /&gt;
|example1 = print(abs(1)); # prints &amp;quot;1&amp;quot;&lt;br /&gt;
|example2 = print(abs(-1)); # prints &amp;quot;1&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===aircraftToCart() ===&lt;br /&gt;
This new function in FG 2017.2.1 takes coordinates in aircraft structural coordinate system, and translate them into geocentric coordinates.&lt;br /&gt;
Example for (5,6,7):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var pos = aircraftToCart({x: -5, y: 6, z: -7});&lt;br /&gt;
var coord = geo.Coord.new();&lt;br /&gt;
coord.set_xyz(pos.x, pos.y, pos.z);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Notice: x and z is inverted sign on purpose.&lt;br /&gt;
if you want lat. lon, alt from that, just call: (degrees and meters)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
coord.lat()&lt;br /&gt;
coord.lon()&lt;br /&gt;
coord.alt()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===addcommand() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = addcommand(name, code);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=659|t=Source}}&lt;br /&gt;
|version = 2.12&lt;br /&gt;
|commit = {{flightgear commit|7b663c|t=commit}}&lt;br /&gt;
|text = {{see also|Howto:Add new fgcommands to FlightGear}}&lt;br /&gt;
&lt;br /&gt;
This function enables the addition of a new custom [[fgcommands|fgcommand]] to FlightGear from within Nasal. An fgcommand created using this method can be used in exactly the same way as the built-in fgcommands. Also, an fgcommand created via this method will always return True or 1, like all other fgcommands.&lt;br /&gt;
|param1 = name&lt;br /&gt;
|param1text = This will become the name of the new fgcommand. Must be a string.&lt;br /&gt;
|param2 = code&lt;br /&gt;
|param2text = The code that will be executed when the fgcommand is run. Must be a function.&lt;br /&gt;
|example1text = This example adds a new fgcommand and then runs it. Although it executes a simple {{func link|print()}} statement, any valid Nasal code can be used.&lt;br /&gt;
|example1 = addcommand(&amp;quot;myFGCmd&amp;quot;, func(node) {&lt;br /&gt;
    print(&amp;quot;fgcommand 'myFGCmd' has been run.&amp;quot;);&lt;br /&gt;
    props.dump( node );&lt;br /&gt;
});&lt;br /&gt;
fgcommand(&amp;quot;myFGCmd&amp;quot;, props.Node.new({foo:1, bar:2}) );&lt;br /&gt;
|example2text = This example demonstrates how parameters are defined in a new fgcommand.&lt;br /&gt;
|example2 = addcommand(&amp;quot;myFGCmd&amp;quot;, func(node){&lt;br /&gt;
    print(node.getNode(&amp;quot;number&amp;quot;).getValue()); # prints the value of &amp;quot;number,&amp;quot; which is 12&lt;br /&gt;
});&lt;br /&gt;
fgcommand(&amp;quot;myFGCmd&amp;quot;, props.Node.new({&amp;quot;number&amp;quot;: 12}));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===airportinfo()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = airportinfo();&lt;br /&gt;
airportinfo(type);&lt;br /&gt;
airportinfo(id);&lt;br /&gt;
airportinfo(lat, lon[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1024|t=Source}}&lt;br /&gt;
|text = Function for retrieval of airport, heliport, or seaplane base information. It returns a Nasal ghost; however, its structure is like that of a Nasal hash. The following information is returned:&lt;br /&gt;
* '''parents''': A vector containing a hash of various functions to access information about the runway. See {{flightgear file|src/Scripting/NasalPositioned.cxx|l=2659}} for full list.&lt;br /&gt;
* '''lon''': Longitude of the location.&lt;br /&gt;
* '''lat''': Latitude of the location.&lt;br /&gt;
* '''has_metar''': True or false depending whether the airport has a [[METAR]] code defined for it.&lt;br /&gt;
* '''elevation''': Elevation of the location in metres.&lt;br /&gt;
* '''id''': ICAO code of the airport (or ID of the seaplane base/heliport).&lt;br /&gt;
* '''name''': Name of the airport/heliport/seaplane base.&lt;br /&gt;
* '''runways'''&lt;br /&gt;
** '''&amp;lt;runway name&amp;gt;'''&lt;br /&gt;
*** '''id''': Name of runway.&lt;br /&gt;
*** '''lat''': Latitude of the runway.&lt;br /&gt;
*** '''lon''': Longitude of the runway.&lt;br /&gt;
*** '''heading''': Heading of the runway.&lt;br /&gt;
*** '''length''': Length of the runway in metres.&lt;br /&gt;
*** '''width''': Width of the runway in metres.&lt;br /&gt;
*** '''surface''': Runway surface type.&lt;br /&gt;
*** '''threshold''': Length of the runway's {{wikipedia|displaced threshold}} in metres. Will return 0 if there is none.&lt;br /&gt;
*** '''stopway''': Length of the runway's stopway (the area before the threshold) in metres. Will return 0 if there is none.&lt;br /&gt;
*** '''reciprocal''': &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt; ghost of the reciprocal runway.&lt;br /&gt;
*** '''ils_frequency_mhz''': ILS frequency in megahertz.&lt;br /&gt;
*** '''ils''': &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt; ghost of the ILS transmitter.&lt;br /&gt;
* '''helipads'''&lt;br /&gt;
** '''&amp;lt;helipad name&amp;gt;'''&lt;br /&gt;
*** '''id''': Name of helipad.&lt;br /&gt;
*** '''lat''': Latitude of the helipad.&lt;br /&gt;
*** '''lon''': Longitude of the helipad.&lt;br /&gt;
*** '''heading''': Heading of the helipad.&lt;br /&gt;
*** '''length''': Length of the helipad in metres.&lt;br /&gt;
*** '''width''': Width of the helipad in metres.&lt;br /&gt;
*** '''surface''': Helipad surface type.&lt;br /&gt;
* '''taxiways'''&lt;br /&gt;
** '''&amp;lt;taxiway name&amp;gt;'''&lt;br /&gt;
*** '''id''': Name of taxiway.&lt;br /&gt;
*** '''lat''': Latitude of the taxiway.&lt;br /&gt;
*** '''lon''': Longitude of the taxiway.&lt;br /&gt;
*** '''heading''': Heading of the taxiway.&lt;br /&gt;
*** '''length''': Length of the taxiway in metres.&lt;br /&gt;
*** '''width''': Width of the taxiway in metres.&lt;br /&gt;
*** '''surface''': Taxiway surface type.&lt;br /&gt;
&lt;br /&gt;
Information is extracted in the same way as accessing members of a Nasal hash. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# prints to lengths of the runways of the nearest airport in feet and metres&lt;br /&gt;
var info = airportinfo();&lt;br /&gt;
print(&amp;quot;-- Lengths of the runways at &amp;quot;, info.name, &amp;quot; (&amp;quot;, info.id, &amp;quot;) --&amp;quot;);&lt;br /&gt;
foreach(var rwy; keys(info.runways)){&lt;br /&gt;
    print(rwy, &amp;quot;: &amp;quot;, math.round(info.runways[rwy].length * M2FT), &amp;quot; ft (&amp;quot;, info.runways[rwy].length, &amp;quot; m)&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that searches for locations that are a long way away (e.g., the nearest seaplane base to the middle of the Sahara) may cause FlightGear to pause for an amount of time.&lt;br /&gt;
|param1 = id&lt;br /&gt;
|param1text = The {{wikipedia|International Civil Aviation Organization airport code|ICAO code|noicon=1}} of an airport to retrieve information about.&lt;br /&gt;
|param2 = type&lt;br /&gt;
|param2text = When this argument is used, the function will return the closest airport of a certain type. Can be one of &amp;quot;heliport,&amp;quot; &amp;quot;seaport,&amp;quot; or &amp;quot;airport&amp;quot; (default).&lt;br /&gt;
: {{inote|Running this function without any parameters is equivalent to this:&lt;br /&gt;
: &amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
airportinfo(&amp;quot;airport&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|param3 = lat ''and'' lon&lt;br /&gt;
|param3text = When these parameters are used, the function will return information on the nearest airport, heliport or seaplane base (depending on the '''type''' parameter) to those coordinates.&lt;br /&gt;
|example1 = var info = airportinfo();&lt;br /&gt;
print(&amp;quot;Nearest airport: &amp;quot;, info.name, &amp;quot; (&amp;quot;, info.id, &amp;quot;)&amp;quot;); # prints the name and ICAO code of the nearest airport&lt;br /&gt;
|example2 = var info = airportinfo(&amp;quot;heliport&amp;quot;);&lt;br /&gt;
print(&amp;quot;Elevation of the nearest heliport: &amp;quot;, math.round(info.elevation * M2FT), &amp;quot; ft&amp;quot;); # prints the elevation and name of the nearest heliport&lt;br /&gt;
|example3 = var info = airportinfo(&amp;quot;KSQL&amp;quot;);&lt;br /&gt;
print(&amp;quot;-- Runways of &amp;quot;, info.name, &amp;quot; (&amp;quot;, info.id, &amp;quot;): --&amp;quot;);&lt;br /&gt;
foreach(var rwy; keys(info.runways)) {&lt;br /&gt;
    print(rwy); # prints the runways of KSQL&lt;br /&gt;
}&lt;br /&gt;
|example4 = var info = airportinfo(37.81909385, -122.4722484);&lt;br /&gt;
print(&amp;quot;Coordinates of the nearest airport: &amp;quot;, info.lat, &amp;quot;, &amp;quot;, info.lon); # print the name and ICAO of the nearest airport to the Golden Gate Bridge&lt;br /&gt;
|example5 = var info = airportinfo(37.81909385, -122.4722484, &amp;quot;seaport&amp;quot;);&lt;br /&gt;
print(&amp;quot;Nearest seaplane base: &amp;quot;, info.name, &amp;quot; (&amp;quot;, info.id, &amp;quot;)&amp;quot;); # print the name and ID of the nearest seaplane base to the Golden Gate Bridge&lt;br /&gt;
|example6text = This example prints the all information from an &amp;lt;code&amp;gt;airportinfo()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
|example6 = var info = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
print(info.name);&lt;br /&gt;
print(info.id);&lt;br /&gt;
print(info.lat);&lt;br /&gt;
print(info.lon);&lt;br /&gt;
print(info.has_metar);&lt;br /&gt;
print(info.elevation);&lt;br /&gt;
foreach(var rwy; keys(info.runways)){&lt;br /&gt;
    print(&amp;quot;-- &amp;quot;, rwy, &amp;quot; --&amp;quot;);&lt;br /&gt;
    print(info.runways[rwy].lat);&lt;br /&gt;
    print(info.runways[rwy].lon);&lt;br /&gt;
    print(info.runways[rwy].length);&lt;br /&gt;
    print(info.runways[rwy].width);&lt;br /&gt;
    print(info.runways[rwy].heading);&lt;br /&gt;
    print(info.runways[rwy].stopway);&lt;br /&gt;
    print(info.runways[rwy].threshold);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===airwaysRoute() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = airwaysRoute(start, end[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1933|t=Source}}&lt;br /&gt;
|text = {{see also|Nasal Flightplan}}&lt;br /&gt;
This function returns a vector containing waypoints between two given waypoints. The returned waypoints are ghosts, but can be accessed in the same way as a Nasal hash. See [[Nasal Flightplan]] for more information.&lt;br /&gt;
|param1 = start&lt;br /&gt;
|param1text = Start waypoint, in the form of a waypoint ghost, such as that provided by {{func link|flightplan()}}.&lt;br /&gt;
|param2 = end&lt;br /&gt;
|param2text = Same as above.&lt;br /&gt;
|param3 = type&lt;br /&gt;
|param3text = Instructs the function to compute a high level route (when set to &amp;quot;highlevel&amp;quot;), or a low level route (when set to &amp;quot;lowlevel&amp;quot;). Defaults to &amp;quot;highlevel.&amp;quot;&lt;br /&gt;
|example1text = In the [[route manager]] dialog, add two waypoints to the flightplan, ideally ones that are far apart (tip: use the [[Map]] for this). Then run this code in your Nasal Console.&lt;br /&gt;
|example1 = var fp = flightplan();&lt;br /&gt;
var start = fp.getWP(0);&lt;br /&gt;
var end = fp.getWP(fp.getPlanSize() - 1);&lt;br /&gt;
var rt = airwaysRoute(start, end);&lt;br /&gt;
foreach(var wp; rt){&lt;br /&gt;
    print(wp.wp_name); # print the waypoints in the computed route&lt;br /&gt;
}&lt;br /&gt;
|example2text = Exactly the same as above, but computes a low level path.&lt;br /&gt;
|example2 = var fp = flightplan();&lt;br /&gt;
var start = fp.getWP(0);&lt;br /&gt;
var end = fp.getWP(fp.getPlanSize() - 1);&lt;br /&gt;
var rt = airwaysRoute(start, end, &amp;quot;lowlevel&amp;quot;);&lt;br /&gt;
foreach(var wp; rt){&lt;br /&gt;
    print(wp.wp_name); # print the waypoints in the computed route&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===airway()===&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = airway(ident [, pos]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=2644|t=Source}}&lt;br /&gt;
|text = {{see also|Nasal Flightplan}}&lt;br /&gt;
This function returns a ghost containing an airway of a specified id.&lt;br /&gt;
|param1 = ident&lt;br /&gt;
|param1text = a Positioned ghost (leg, navaid, airport) and so on, passed to the search function.&lt;br /&gt;
|param2 = pos&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===assert()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = assert(condition[, message]);&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|version = 3.2&lt;br /&gt;
|commit = {{fgdata commit|8b16a7|t=commit}}&lt;br /&gt;
|text = Returns either true if the condition evaluates as true, or aborts with a {{func link|die()}} call, which can be customised.&lt;br /&gt;
|param1 = condition&lt;br /&gt;
|param1text = Condition to evaluate.&lt;br /&gt;
|param2 = message&lt;br /&gt;
|param2text = Optional message that will be used in any {{func link|die()}} call. Defaults to &amp;quot;assertion failed!&amp;quot;&lt;br /&gt;
|example1 = var a = 1;&lt;br /&gt;
var b = 2;&lt;br /&gt;
print(assert(a &amp;lt; b)); # prints &amp;quot;1&amp;quot; (true)&lt;br /&gt;
|example2 = var a = 1;&lt;br /&gt;
var b = 2;&lt;br /&gt;
assert(a &amp;gt; b, 'a is not greater than b'); # aborts with a custom error message&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===carttogeod()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = carttogeod(x, y, z);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=945|t=Source}}&lt;br /&gt;
|text = Converts {{wikipedia|ECEF|Earth-centered, Earth-fixed}} coordinates (x, y and z) to {{wikipedia|geodetic coordinates}} (latitude, longitude, and altitude). A vector is returned containing latitude and longitude, both in degrees, and altitude, which is returned in metres above the equatorial radius of Earth as defined by the {{wikipedia|WGS 84}} (6,378,137 metres).&amp;lt;ref&amp;gt;{{simgear file|simgear/math/sg_geodesy.hxx|l=43}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|param1 = x&lt;br /&gt;
|param1text = Mandatory x-axis value, in metres.&lt;br /&gt;
|param2 = y&lt;br /&gt;
|param2text = Mandatory y-axis value, in metres.&lt;br /&gt;
|param3 = z&lt;br /&gt;
|param3text = Mandatory z-axis value, in metres.&lt;br /&gt;
|example1 = var (lat, lon, alt) = carttogeod(6378137, 0, 0); # point is the intersection of the prime meridian and equator.&lt;br /&gt;
print(&amp;quot;Latitude: &amp;quot;, lat); # prints lat, lon and alt, which are all zero, see above&lt;br /&gt;
print(&amp;quot;Longitude: &amp;quot;, lon);&lt;br /&gt;
print(&amp;quot;Altitude: &amp;quot;, alt);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===cmdarg()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|private = _cmdarg()&lt;br /&gt;
|syntax = cmdarg();&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=513|t=Part 1}} {{!}} {{fgdata file|Nasal/globals.nas|t=Part 2}}&lt;br /&gt;
|text = &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; returns the property root of certain types of XML files. These could be nodes in the [[Property Tree]], or temporary and/or non-public nodes outside the Property tree. &lt;br /&gt;
It is used by Nasal scripts embedded in XML files. It returns a &amp;lt;code&amp;gt;props.Node&amp;lt;/code&amp;gt; object (see {{fgdata file|Nasal/props.nas}}), and you can use all of its methods on the returned value. &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; should only be used in four types/places of XML files:&lt;br /&gt;
* Bindings: This is needed so that the value of a joystick's axis can be accessed internally.&lt;br /&gt;
* Dialogs: This will return the root of the dialog in the Property Tree. This is useful for dialogs that are created/modified procedurally (e.g. for populating/changing widgets while loading the dialog). &lt;br /&gt;
* Embedded Canvases: The Nasal code behind [[Canvas]] windows [[Howto:Adding a canvas to a GUI dialog|embedded in PUI dialogs]] can use it to accessing the root directory of their Canvas.&lt;br /&gt;
* Animation XML files: If the animation XML file is used in an AI/MP model, &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; will return the root of the AI model in the &amp;lt;code&amp;gt;/ai/models/&amp;lt;/code&amp;gt; directory. Examples: &amp;lt;code&amp;gt;/ai/models/aircraft[3]/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/ai/models/multiplayer[1]/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should not use &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; in places other than those stated above. Although it won't cause an error, it will return the value of the last legitimate &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; call. &lt;br /&gt;
&lt;br /&gt;
Also, you should not delay &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; using {{func link|maketimer()}}, {{func link|settimer()}} or {{func link|setlistener()}}, because it will return an unrelated property.&lt;br /&gt;
|example1 = fgcommand(&amp;quot;dialog-show&amp;quot;, {&amp;quot;dialog-name&amp;quot;: &amp;quot;cmdarg-demo&amp;quot;});&lt;br /&gt;
|example1text = &amp;lt;br&amp;gt;This example demonstrates the usage of &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; in a binding.  Save the below XML snippet as &amp;lt;tt&amp;gt;[[$FG_ROOT]]/gui/dialogs/cmdarg-demo.xml&amp;lt;/tt&amp;gt;. Then run the Nasal snippet below in your [[Nasal Console]]. Upon clicking {{button|Close}}, a message will be printed sowing the root of the binding in the Property Tree.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;name&amp;gt;cmdarg-demo&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;layout&amp;gt;vbox&amp;lt;/layout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;text&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Click &amp;quot;Close&amp;quot; to activate the demonstration (a message in the console).&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;button&amp;gt;&lt;br /&gt;
  &amp;lt;legend&amp;gt;Close&amp;lt;/legend&amp;gt;&lt;br /&gt;
  &amp;lt;binding&amp;gt;&lt;br /&gt;
    &amp;lt;command&amp;gt;nasal&amp;lt;/command&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;print(&amp;quot;Button binding root: '&amp;quot; ~ cmdarg().getPath() ~ &amp;quot;'&amp;quot;);&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/binding&amp;gt;&lt;br /&gt;
  &amp;lt;binding&amp;gt;&lt;br /&gt;
    &amp;lt;command&amp;gt;dialog-close&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/binding&amp;gt;&lt;br /&gt;
&amp;lt;/button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|example2text = This example demonstrates the usage of &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; in Nasal code within dialogs.  Open &amp;lt;tt&amp;gt;[[$FG_ROOT]]/gui/dialogs/cmdarg-demo.xml&amp;lt;/tt&amp;gt; from the previous example, copy &amp;amp; paste the code below, and save it. Then run the same Nasal snippet as the previous example in your Nasal Console. If you click {{button|Click me!}}, the button's label will change to &amp;quot;I've been changed!&amp;quot;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;name&amp;gt;cmdarg-demo&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;layout&amp;gt;vbox&amp;lt;/layout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;text&amp;gt;&lt;br /&gt;
  &amp;lt;label&amp;gt;Click &amp;quot;Click me!&amp;quot; to activate the demonstration (the button's label will change).&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;button&amp;gt;&lt;br /&gt;
  &amp;lt;legend&amp;gt;Click me!&amp;lt;/legend&amp;gt;&lt;br /&gt;
  &amp;lt;binding&amp;gt;&lt;br /&gt;
    &amp;lt;command&amp;gt;nasal&amp;lt;/command&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;change_label();&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/binding&amp;gt;&lt;br /&gt;
&amp;lt;/button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;button&amp;gt;&lt;br /&gt;
  &amp;lt;legend&amp;gt;Close&amp;lt;/legend&amp;gt;&lt;br /&gt;
  &amp;lt;binding&amp;gt;&lt;br /&gt;
    &amp;lt;command&amp;gt;dialog-close&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/binding&amp;gt;&lt;br /&gt;
&amp;lt;/button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nasal&amp;gt;&lt;br /&gt;
  &amp;lt;open&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
    var dlg_root = cmdarg();&lt;br /&gt;
    var dlg_name = {&amp;quot;dialog-name&amp;quot;: &amp;quot;cmdarg-demo&amp;quot;};&lt;br /&gt;
    var change_label = func {&lt;br /&gt;
        dlg_root.getNode(&amp;quot;button[0]/legend&amp;quot;).setValue(&amp;quot;I've been changed!&amp;quot;);&lt;br /&gt;
        fgcommand(&amp;quot;dialog-close&amp;quot;, dlg_name);&lt;br /&gt;
        fgcommand(&amp;quot;dialog-show&amp;quot;, dlg_name);&lt;br /&gt;
    }&lt;br /&gt;
  ]]&amp;gt;&amp;lt;/open&amp;gt;&lt;br /&gt;
&amp;lt;/nasal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|example3text = For an example of &amp;lt;code&amp;gt;cmdarg()&amp;lt;/code&amp;gt; used with Canvas, please see [[Howto:Adding a canvas to a GUI dialog#FGPlot|Howto:Adding a canvas to a GUI dialog]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===courseAndDistance()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = courseAndDistance(to);&lt;br /&gt;
courseAndDistance(from, to);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1668|t=Source}}&lt;br /&gt;
|text = Returns a vector containing the course from one point to another and the distance between them in nautical miles. The course is the initial bearing (see [http://www.movable-type.co.uk/scripts/latlong.html#bearing here]), and is in the range 0–360. Both arguments can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object with geodetic coordinates (cartesian coordinates will not be accepted)&lt;br /&gt;
|param1 = from&lt;br /&gt;
|param1text = Optional parameter defining the from where the function should calculate its results. If the function is given one argument ('''to'''), the aircraft's current position will be used. As well as the argument types as defined above, this argument can be two numbers separated with a comma, as if the function is taking three arguments. See example 5 below.&lt;br /&gt;
|param2 = to&lt;br /&gt;
|param2text = Like the first parameter, but defines the second point.&lt;br /&gt;
|example1text = This example demonstrates the usage of the function with the &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt; ghost type.&lt;br /&gt;
|example1 = var from = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
var to = airportinfo(&amp;quot;KSQL&amp;quot;);&lt;br /&gt;
var (course, dist) = courseAndDistance(from, to);&lt;br /&gt;
print(course); # prints course from KSFO to KSQL&lt;br /&gt;
print(dist); # prints distance in nm from KSFO to KSQL&lt;br /&gt;
|example2text = This example demonstrates the usage of the function with hashes containing ''lat'' and ''lon''.&lt;br /&gt;
|example2 = var from = {lat: 0, lon: 0};&lt;br /&gt;
var to = {lat: 1, lon: 1};&lt;br /&gt;
var (course, dist) = courseAndDistance(from, to);&lt;br /&gt;
print(course);&lt;br /&gt;
print(dist);&lt;br /&gt;
|example3text = This example demonstrates usage of a geo.Coord object.&lt;br /&gt;
|example3 = var from = geo.Coord.new().set_latlon(0, 0);&lt;br /&gt;
var to = geo.Coord.new().set_latlon(1, 1);&lt;br /&gt;
var (course, dist) = courseAndDistance(from, to);&lt;br /&gt;
print(course);&lt;br /&gt;
print(dist);&lt;br /&gt;
|example4text = This example demonstrates usage of differing parameter types.&lt;br /&gt;
|example4 = var from = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
var to = geo.Coord.new().set_latlon(0, 0);&lt;br /&gt;
var (course, dist) = courseAndDistance(from, to);&lt;br /&gt;
print(course);&lt;br /&gt;
print(dist);&lt;br /&gt;
|example5text = The same as above, but the other way round.&lt;br /&gt;
|example5 = var to = {lat: 1, lon: 1};&lt;br /&gt;
var (course, dist) = courseAndDistance(0, 0, to);&lt;br /&gt;
print(course);&lt;br /&gt;
print(dist);&lt;br /&gt;
|example6text = Usage of just one parameter.&lt;br /&gt;
|example6 = var dest = airportinfo(&amp;quot;KSQL&amp;quot;);&lt;br /&gt;
var (course, dist) = courseAndDistance(dest);&lt;br /&gt;
print(&amp;quot;Turn to heading &amp;quot;, math.round(course), &amp;quot;. You have &amp;quot;, sprintf(&amp;quot;%.2f&amp;quot;, dist), &amp;quot; nm to go&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===createFlightplan()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = createFlightplan(path);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=2331|t=Source}}&lt;br /&gt;
|text = Creates an empty flightplan object. It accepts one argument, ''path'' passed an absolute path to a .fgfp / .gpx file, it will populate the flightplan with waypoints from the file.&lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = Optional parameter defining the file from which a flightplan will be populated.&lt;br /&gt;
|example1 = &lt;br /&gt;
var path = getprop(&amp;quot;/sim/fg-home&amp;quot;) ~ &amp;quot;/Export/test.fgfp&amp;quot;;&lt;br /&gt;
var flightplan = createFlightplan(path);&lt;br /&gt;
debug.dump(flightplan);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===createDiscontinuity()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = createDiscontinuity();&lt;br /&gt;
|text = Returns a &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost object. A route discontinuity is inserted by an {{abbr|FMS|Flight Management System}} when it is unsure how to connect two waypoints.&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=2045|t=Source}}&lt;br /&gt;
|version = 2016.1&lt;br /&gt;
|commit = {{flightgear commit|caead6|t=commit}}&lt;br /&gt;
}}&lt;br /&gt;
===createViaTo()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = createViaTo(airway, waypoint);&lt;br /&gt;
|text = Returns a &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost object. It represents a route &amp;quot;via '''airway''' to '''waypoint'''&amp;quot;.&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=2009|t=Source}}&lt;br /&gt;
|version = 2016.1&lt;br /&gt;
|commit = {{flightgear commit|caead6|t=commit}}&lt;br /&gt;
|param1 = airway&lt;br /&gt;
|param1text = The name of an airway.&lt;br /&gt;
|param2 = waypoint&lt;br /&gt;
|param2text = Must be in the airway and one of:&lt;br /&gt;
* The name of a waypoint.&lt;br /&gt;
* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt; ghost object.&lt;br /&gt;
}}&lt;br /&gt;
===createWP()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = createWP(pos, name[, flag]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1964|t=Source}}&lt;br /&gt;
|text = Creates a new waypoint ghost object.&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Dictates the position of the new waypoint. It can be one of the following:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. See example 4 below.&lt;br /&gt;
|param2 = name&lt;br /&gt;
|param2text = String that will become the name of the new waypoint.&lt;br /&gt;
|param3 = flag&lt;br /&gt;
|param3text = Optional string that will tell FlightGear what type of waypoint it is. Must be one of &amp;quot;sid,&amp;quot; &amp;quot;star,&amp;quot; &amp;quot;approach,&amp;quot; &amp;quot;missed,&amp;quot; or &amp;quot;pseudo.&amp;quot;&lt;br /&gt;
|example1text = Creates a waypoint directly in front and 1 km away and appends it to the flight plan.&lt;br /&gt;
|example1 = var pos = geo.aircraft_position().apply_course_distance(getprop(&amp;quot;/orientation/heading-deg&amp;quot;), 1000);&lt;br /&gt;
var wp = createWP(pos, &amp;quot;NEWWP&amp;quot;);&lt;br /&gt;
var fp = flightplan();&lt;br /&gt;
fp.appendWP(wp);&lt;br /&gt;
|example2 = var pos = geo.aircraft_position().apply_course_distance(getprop(&amp;quot;/orientation/heading-deg&amp;quot;), 1000);&lt;br /&gt;
var wp = createWP({lat: pos.lat(), lon: pos.lon()}, &amp;quot;NEWWP&amp;quot;);&lt;br /&gt;
var fp = flightplan();&lt;br /&gt;
fp.appendWP(wp);&lt;br /&gt;
|example3 = var apt = airportinfo();&lt;br /&gt;
var wp = createWP(apt, &amp;quot;NEWWP&amp;quot;);&lt;br /&gt;
var fp = flightplan();&lt;br /&gt;
fp.appendWP(wp);&lt;br /&gt;
|example4 = var pos = geo.aircraft_position().apply_course_distance(getprop(&amp;quot;/orientation/heading-deg&amp;quot;), 1000);&lt;br /&gt;
var wp = createWP(pos.lat(), pos.lon(), &amp;quot;NEWWP&amp;quot;);&lt;br /&gt;
var fp = flightplan();&lt;br /&gt;
fp.appendWP(wp);&lt;br /&gt;
|example5text = Creates a new waypoint and adds it to the flight plan. Waypoints of the type &amp;quot;pseudo&amp;quot; are then removed from the flight plan, including the new waypoint. The {{func link|print()}} statements show this.&lt;br /&gt;
|example5 = var pos = geo.aircraft_position().apply_course_distance(getprop(&amp;quot;/orientation/heading-deg&amp;quot;), 1000);&lt;br /&gt;
var wp = createWP(pos, &amp;quot;NEWWP&amp;quot;, &amp;quot;pseudo&amp;quot;);&lt;br /&gt;
var fp = flightplan();&lt;br /&gt;
fp.appendWP(wp);&lt;br /&gt;
print(fp.getPlanSize());&lt;br /&gt;
fp.clearWPType(&amp;quot;pseudo&amp;quot;);&lt;br /&gt;
print(fp.getPlanSize());&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===createWPFrom()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = createWPFrom(object[, flag]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1989|t=Source}}&lt;br /&gt;
|text = Creates a new waypoint object from another object.&lt;br /&gt;
|param1 = object&lt;br /&gt;
|param1text = A ghost object. Must be a ghost type that is one of &amp;quot;airport,&amp;quot; &amp;quot;navaid,&amp;quot; &amp;quot;runway,&amp;quot; or &amp;quot;fix.&amp;quot;&lt;br /&gt;
|param2 = flag&lt;br /&gt;
|param2text = Optional string that will tell FlightGear what type of waypoint it is. Must be one of &amp;quot;sid,&amp;quot; &amp;quot;star,&amp;quot; &amp;quot;approach,&amp;quot; &amp;quot;missed,&amp;quot; or &amp;quot;pseudo.&amp;quot;&lt;br /&gt;
|example1text = Creates a new waypoint and appends it to the flight plan.&lt;br /&gt;
|example1 = var apt = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
var wp = createWPFrom(apt);&lt;br /&gt;
var fp = flightplan();&lt;br /&gt;
fp.appendWP(wp);&lt;br /&gt;
|example2text = Creates a new waypoint and appends it to the flight plan. This way point is then removed; the {{func link|print()}} statements prove this.&lt;br /&gt;
|example2 = var apt = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
var wp = createWPFrom(apt, &amp;quot;pseudo&amp;quot;);&lt;br /&gt;
print(wp.wp_name);&lt;br /&gt;
var fp = flightplan();&lt;br /&gt;
fp.appendWP(wp);&lt;br /&gt;
print(fp.getPlanSize());&lt;br /&gt;
fp.clearWPType(&amp;quot;pseudo&amp;quot;);&lt;br /&gt;
print(fp.getPlanSize());&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===defined()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = defined(symbol);&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|text = Returns 1 (true) or 0 (false) depending on whether a variable exists.&lt;br /&gt;
|param1 = symbol&lt;br /&gt;
|param1text = A string that will be what the function searches for.&lt;br /&gt;
|example1 = var number = 12;&lt;br /&gt;
var check_exist = func {&lt;br /&gt;
    print(&amp;quot;Variable 'number' &amp;quot;, defined(&amp;quot;number&amp;quot;) == 1 ? &amp;quot;exists&amp;quot; : &amp;quot;does not exist&amp;quot;); # 'number' does exist&lt;br /&gt;
    print(&amp;quot;Variable 'number2' &amp;quot;, defined(&amp;quot;number2&amp;quot;) == 1 ? &amp;quot;exists&amp;quot; : &amp;quot;does not exist&amp;quot;); # 'number2' does not exist&lt;br /&gt;
}&lt;br /&gt;
check_exist();&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===directory()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = directory(path);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=572|t=Source}}&lt;br /&gt;
|text = Returns a vector containing a list of the folders and files in a given file path or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; if the path doesn't exist. Hidden folders and files are not added to the vector.&lt;br /&gt;
{{inote|The first two elements of the vector will be &amp;lt;code&amp;gt;'.'&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'..'&amp;lt;/code&amp;gt;. These are for navigating back up the file tree, but have no use in Nasal. They can be safely removed from the vector.}}&lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = Absolute file path.&lt;br /&gt;
|example1text = Gets the folders and files in [[$FG_ROOT]], and then removes the extra first two elements (see note above). &lt;br /&gt;
|example1 = var dir = directory(getprop(&amp;quot;/sim/fg-root&amp;quot;)); # get directory&lt;br /&gt;
dir = subvec(dir, 2); # strips off the first two elements&lt;br /&gt;
debug.dump(dir); # dump the vector&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===fgcommand()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = fgcommand(cmd[, args]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=456|t=Part 1}} {{!}} {{fgdata file|Nasal/globals.nas|t=Part 2}}&lt;br /&gt;
|text = Runs an fgcommand. See also {{readme file|commands}} and [[Bindings]] for more information. See {{flightgear file|src/Main/fg_commands.cxx|l=1425}} for the full list of fgcommands. Note that fgcommands generated by {{func link|addcommand()}} can also be run using this function. Also, the full list of fgcommands depends on the version of FlightGear you have. Returns 1 (true) if the fgcommand succeeded or 0 (false) if it failed.&lt;br /&gt;
|param1 = cmd&lt;br /&gt;
|param1text = String that is the name of the command that is to be run.&lt;br /&gt;
|param2 = args&lt;br /&gt;
|param2text = If the fgcommand takes arguments, they are inputted using this argument. Can either be a &amp;lt;code&amp;gt;props.Node&amp;lt;/code&amp;gt; object, or a hash (see examples below).&lt;br /&gt;
|example1 = fgcommand(&amp;quot;null&amp;quot;); # does nothing&lt;br /&gt;
|example2 = var args = props.Node.new({'script': 'print(&amp;quot;Running fgcommand&amp;quot;);'});&lt;br /&gt;
if (fgcommand(&amp;quot;nasal&amp;quot;, args)) { # prints &amp;quot;Running fgcommand&amp;quot; and then one of these print statements&lt;br /&gt;
    print(&amp;quot;Fgcommand succeeded&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Fgcommand encountered a problem&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
|example3 = var args = { 'dialog-name': 'about' };&lt;br /&gt;
fgcommand(&amp;quot;dialog-show&amp;quot;, args); # shows the 'about' dialog&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===findAirportsByICAO() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = findAirportsByICAO(search[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1096|t=Source}}&lt;br /&gt;
|text = Returns a vector containing &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt; ghost objects which are (by default) airports whose ICAO code matches the search string. The results are sorted by range from closest to furthest.&lt;br /&gt;
|param1 = search&lt;br /&gt;
|param1text = Search string for the function. Can either be a partial or a full ICAO code.&lt;br /&gt;
:{{icaution|The more matches there are for the given code, the longer the function will take. Passing just one character (e.g., &amp;quot;K&amp;quot;), might make FlightGear hang for a certain amount of time.}}&lt;br /&gt;
|param2 = type&lt;br /&gt;
|param2text = This will narrow the search to airports of a certain type. By default, only airports are searched for. May be one of &amp;quot;airport,&amp;quot; &amp;quot;heliport,&amp;quot; or &amp;quot;seaport.&amp;quot;&lt;br /&gt;
|example1 = var apts = findAirportsByICAO(&amp;quot;KSF&amp;quot;); # finds all airports matching &amp;quot;KSF&amp;quot;&lt;br /&gt;
foreach(var apt; apts){&lt;br /&gt;
    print(apt.name, &amp;quot; (&amp;quot;, apt.id, &amp;quot;)&amp;quot;); # prints them&lt;br /&gt;
}&lt;br /&gt;
|example2 = var apts = findAirportsByICAO(&amp;quot;SP0&amp;quot;, &amp;quot;seaport&amp;quot;); # finds all seaplane bases matching &amp;quot;SP0&amp;quot;&lt;br /&gt;
foreach(var apt; apts){&lt;br /&gt;
    print(apt.name, &amp;quot; (&amp;quot;, apt.id, &amp;quot;)&amp;quot;); # prints them&lt;br /&gt;
}&lt;br /&gt;
|example3 = var apt = findAirportsByICAO(&amp;quot;XBET&amp;quot;); # one way to check if an airport does exist&amp;quot;&lt;br /&gt;
if (size(apt) == 0) {&lt;br /&gt;
    print(&amp;quot;Airport does not exist&amp;quot;); # this one will be printed&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Airport does exist&amp;quot;);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===findAirportsWithinRange()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = findAirportsWithinRange([pos, ]range[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1066|t=Source}}&lt;br /&gt;
|text = Returns a vector of &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt; ghost object which are (by default) airports that are within a given range of a given position, or the aircraft's current position. The results are sorted by range from closest to furthest.&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to search around. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. Example: &amp;lt;code&amp;gt;findAirportsWithinRange(lat, lon, range, type);&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param2 = range&lt;br /&gt;
|param2text = Mandatory number giving the range in nautical miles within which to search for airports/heliports/seaplane bases.only airports are searched for.&lt;br /&gt;
|param3 = type&lt;br /&gt;
|param3text = This will narrow the search to airports of a certain type. By default, only airports are searched for. May be one of &amp;quot;airport,&amp;quot; &amp;quot;heliport,&amp;quot; or &amp;quot;seaport.&amp;quot;&lt;br /&gt;
|example1text = Searches for airports within 10 nm of [[KSFO]].&lt;br /&gt;
|example1 = var pos = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
var apts = findAirportsWithinRange(pos, 10);&lt;br /&gt;
foreach(var apt; apts){&lt;br /&gt;
    print(apt.name, &amp;quot; (&amp;quot;, apt.id, &amp;quot;)&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
|example2text = Searches for seaplane bases within 15 nm of [[KSFO]].&lt;br /&gt;
|example2 = var pos = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
var apts = findAirportsWithinRange(pos, 15, &amp;quot;seaport&amp;quot;);&lt;br /&gt;
foreach(var apt; apts){&lt;br /&gt;
    print(apt.name, &amp;quot; (&amp;quot;, apt.id, &amp;quot;)&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
|example3text = Searches for airports within 10 nm of your current position.&lt;br /&gt;
|example3 = var apts = findAirportsWithinRange(10);&lt;br /&gt;
foreach(var apt; apts){&lt;br /&gt;
    print(apt.name, &amp;quot; (&amp;quot;, apt.id, &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===findCommByFrequencyMHz()===&lt;br /&gt;
 findCommByFrequencyMHz([pos, ]freq[, type]);&lt;br /&gt;
[[sourceforge:p/flightgear/flightgear/ci/next/tree/src/Scripting/NasalPositioned.cxx#l1547|source]]&lt;br /&gt;
&lt;br /&gt;
Returns a &amp;lt;code&amp;gt;comm&amp;lt;/code&amp;gt; ghost object for a station matching a given frequency. If there is more than one station with that frequency, the nearest station is returned.&lt;br /&gt;
&lt;br /&gt;
'''pos'''&lt;br /&gt;
&lt;br /&gt;
: Optional position to search around. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. Example: &amp;lt;code&amp;gt;findCommByFrequencyMHz(lat, lon, freq, type);&amp;lt;/code&amp;gt;.&lt;br /&gt;
; freq&lt;br /&gt;
: Frequency, in megahertz, of the station to search for.&lt;br /&gt;
; type&lt;br /&gt;
: This will narrow the search to station of a certain type. Defaults to &amp;quot;all.&amp;quot; For the full list of accepted type arguments, see flightgear/src/Navaids/positioned.cxx (line 160)&lt;br /&gt;
'''Example'''&lt;br /&gt;
 var com = findCommByFrequencyMHz(123.6);&lt;br /&gt;
 print(&amp;quot;ID: &amp;quot;, com.id); # prints info about the comm station&lt;br /&gt;
 print(&amp;quot;Name: &amp;quot;, com.name);&lt;br /&gt;
 print(&amp;quot;Latitude: &amp;quot;, com.lat);&lt;br /&gt;
 print(&amp;quot;Longitude: &amp;quot;, com.lon);&lt;br /&gt;
 print(&amp;quot;Type: &amp;quot;, com.type);&lt;br /&gt;
 print(&amp;quot;Frequency: &amp;quot;, sprintf(&amp;quot;%.3f&amp;quot;, com.frequency), &amp;quot; Mhz&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
=== findFixesByID() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = findFixesByID([pos, ]id);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1627|t=Source}}&lt;br /&gt;
|text = Returns a vector containing &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt; ghost objects matching a given ID, sorted by range from a certain position.&lt;br /&gt;
{{inote|Fixes are (usually) also known as waypoints.}}&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to search around. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. Example: &amp;lt;code&amp;gt;findFixesByID(lat, lon, id);&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param2 = id&lt;br /&gt;
|param2text = Full or partial ID of the fix to search for.&lt;br /&gt;
:{{inote|1=Inputting a partial ID does not work correctly (see [http://forum.flightgear.org/viewtopic.php?f=30&amp;amp;t=28129 here]). It is best to just input a full ID.}}&lt;br /&gt;
|example1 = var fixes = findFixesByID(&amp;quot;POGIC&amp;quot;);&lt;br /&gt;
foreach(var fix; fixes){&lt;br /&gt;
    print(fix.id, &amp;quot; - lat: &amp;quot;, fix.lat, &amp;quot; {{!}} lon: &amp;quot;, fix.lon); # prints information about POGIC&lt;br /&gt;
}&lt;br /&gt;
|example2 = var fix = findFixesByID(&amp;quot;ZUNAP&amp;quot;);&lt;br /&gt;
fix = fix[0];&lt;br /&gt;
var (course, dist) = courseAndDistance(fix);&lt;br /&gt;
print(&amp;quot;Turn to heading &amp;quot;, math.round(course), &amp;quot;. You have &amp;quot;, sprintf(&amp;quot;%.2f&amp;quot;, dist), &amp;quot; nm to go to reach &amp;quot;, fixes[0].id);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===findNavaidByFrequencyMHz()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = findNavaidByFrequencyMHz([pos, ]freq[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1547|t=Source}}&lt;br /&gt;
|text = Returns a &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt; ghost object for a navaid matching a given frequency. If there is more than one navaid with that frequency, the nearest station is returned.&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to search around. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. Example: &amp;lt;code&amp;gt;findNavaidByFrequencyMHz(lat, lon, freq, type);&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param2 = freq&lt;br /&gt;
|param2text = Frequency, in megahertz, of the navaid to search for.&lt;br /&gt;
|param3 = type&lt;br /&gt;
|param3text = This will narrow the search to navaids of a certain type. Defaults to &amp;quot;all.&amp;quot; For the full list of accepted type arguments, see {{flightgear file|src/Navaids/positioned.cxx|l=127}}.&lt;br /&gt;
|example1 = var navaid = findNavaidByFrequencyMHz(109.55);&lt;br /&gt;
print(&amp;quot;ID: &amp;quot;, navaid.id); # prints info about the navaid&lt;br /&gt;
print(&amp;quot;Name: &amp;quot;, navaid.name);&lt;br /&gt;
print(&amp;quot;Latitude: &amp;quot;, navaid.lat);&lt;br /&gt;
print(&amp;quot;Longitude: &amp;quot;, navaid.lon);&lt;br /&gt;
print(&amp;quot;Elevation (AMSL): &amp;quot;, navaid.elevation, &amp;quot; m&amp;quot;);&lt;br /&gt;
print(&amp;quot;Type: &amp;quot;, navaid.type);&lt;br /&gt;
print(&amp;quot;Frequency: &amp;quot;, sprintf(&amp;quot;%.3f&amp;quot;, navaid.frequency / 100), &amp;quot; Mhz&amp;quot;);&lt;br /&gt;
print(&amp;quot;Range: &amp;quot;, navaid.range_nm, &amp;quot; nm&amp;quot;);&lt;br /&gt;
if(navaid.course) print(&amp;quot;Course: &amp;quot;, navaid.course);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== findNavaidsByFrequencyMHz()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = findNavaidsByFrequencyMHz([pos, ]freq[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1572|t=Source}}&lt;br /&gt;
|text = Returns a vector conatining &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt; ghost objects for navaids that match a given frequency, sorted from nearest to furthest.&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to search around. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. Example: &amp;lt;code&amp;gt;findNavaidsByFrequencyMHz(lat, lon, freq, type);&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param2 = freq&lt;br /&gt;
|param2text = Frequency, in megahertz, of the navaid to search for.&lt;br /&gt;
|param3 = type&lt;br /&gt;
|param3text = This will narrow the search to navaids of a certain type. Defaults to &amp;quot;all.&amp;quot; For the full list of accepted type arguments, see {{flightgear file|src/Navaids/positioned.cxx|l=127}}.&lt;br /&gt;
|example1 = var navaids = findNavaidsByFrequencyMHz(109.55);&lt;br /&gt;
foreach(var navaid; navaids){&lt;br /&gt;
    print(&amp;quot;--&amp;quot;);&lt;br /&gt;
    print(&amp;quot;ID: &amp;quot;, navaid.id); # prints info about the navaid&lt;br /&gt;
    print(&amp;quot;Name: &amp;quot;, navaid.name);&lt;br /&gt;
    print(&amp;quot;Latitude: &amp;quot;, navaid.lat);&lt;br /&gt;
    print(&amp;quot;Longitude: &amp;quot;, navaid.lon);&lt;br /&gt;
    print(&amp;quot;Elevation (AMSL): &amp;quot;, navaid.elevation, &amp;quot; m&amp;quot;);&lt;br /&gt;
    print(&amp;quot;Type: &amp;quot;, navaid.type);&lt;br /&gt;
    print(&amp;quot;Frequency: &amp;quot;, sprintf(&amp;quot;%.3f&amp;quot;, navaid.frequency / 100), &amp;quot; Mhz&amp;quot;);&lt;br /&gt;
    print(&amp;quot;Range: &amp;quot;, navaid.range_nm, &amp;quot; nm&amp;quot;);&lt;br /&gt;
    if(navaid.course) print(&amp;quot;Course: &amp;quot;, navaid.course);&lt;br /&gt;
    print(&amp;quot;--&amp;quot;);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===findNavaidsByID()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = findNavaidsByID([pos, ]id[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1600|t=Source}}&lt;br /&gt;
|text = Returns a vector containing &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt; ghost objects matching a given ID, sorted by range from a certain position.&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to search around. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. Example: &amp;lt;code&amp;gt;findNavaidsByID(lat, lon, id, type);&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param2 = id&lt;br /&gt;
|param2text = Full or partial ID of the fix to search for.&lt;br /&gt;
:{{inote|1=Inputting a partial ID does not work correctly (see [http://forum.flightgear.org/viewtopic.php?f=30&amp;amp;t=28129 here]). It is best to just input a full ID.}}&lt;br /&gt;
|param3 = type&lt;br /&gt;
|param3text = This will narrow the search to navaids of a certain type. Defaults to &amp;quot;all.&amp;quot; For the full list of accepted type arguments, see {{flightgear file|src/Navaids/positioned.cxx|l=127}}.&lt;br /&gt;
|example1 = var navaid = findNavaidsByID(&amp;quot;MXW&amp;quot;);&lt;br /&gt;
navaid = navaid[0];&lt;br /&gt;
print(&amp;quot;ID: &amp;quot;, navaid.id); # prints info about 'MXW' (a VOR station)&lt;br /&gt;
print(&amp;quot;Name: &amp;quot;, navaid.name);&lt;br /&gt;
print(&amp;quot;Latitude: &amp;quot;, navaid.lat);&lt;br /&gt;
print(&amp;quot;Longitude: &amp;quot;, navaid.lon);&lt;br /&gt;
print(&amp;quot;Elevation (AMSL): &amp;quot;, navaid.elevation, &amp;quot; m&amp;quot;);&lt;br /&gt;
print(&amp;quot;Type: &amp;quot;, navaid.type);&lt;br /&gt;
print(&amp;quot;Frequency: &amp;quot;, sprintf(&amp;quot;%.3f&amp;quot;, navaid.frequency / 1000), &amp;quot; Mhz&amp;quot;);&lt;br /&gt;
print(&amp;quot;Range: &amp;quot;, navaid.range_nm, &amp;quot; nm&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===findNavaidsWithinRange()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = findNavaidsWithinRange([pos, ]range[, type]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1518|t=Source}}&lt;br /&gt;
|text = Returns a vector of &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt; ghost objects which are within a given range of a given position (by default the aircraft's current position). The results are sorted from closest to furthest.&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to search around. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost type&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A geo.Coord object&lt;br /&gt;
:* Two numbers separated by a comma, as if the function is taking three arguments. Example: &amp;lt;code&amp;gt;findNavaidsWithinRange(lat, lon, range, type);&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param2 = range&lt;br /&gt;
|param2text = Mandatory number giving the range in nautical miles within which to search for navaids.&lt;br /&gt;
|param3 = type&lt;br /&gt;
|param3text = This will narrow the search to navaids of a certain type. Defaults to &amp;quot;all.&amp;quot; For the full list of accepted type arguments, see {{flightgear file|src/Navaids/positioned.cxx|l=127}}.&lt;br /&gt;
|example1text = Searches for navaids within 10 nm of [[KSFO]].&lt;br /&gt;
|example1 = var pos = airportinfo(&amp;quot;KSFO&amp;quot;);&lt;br /&gt;
var navs = findNavaidsWithinRange(pos, 10);&lt;br /&gt;
foreach(var nav; navs){&lt;br /&gt;
    print(nav.name, &amp;quot; (ID: &amp;quot;, nav.id, &amp;quot;)&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
|example2text = Searches for navaids within 10 nm of your current position.&lt;br /&gt;
|example2 = var navs = findNavaidsWithinRange(10);&lt;br /&gt;
foreach(var nav; navs){&lt;br /&gt;
    print(nav.name, &amp;quot; (ID: &amp;quot;, nav.id, &amp;quot;)&amp;quot;);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===finddata()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = finddata(path);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=603|t=Source}}&lt;br /&gt;
|text = Takes a relative path and tries to return an absolute one. It works by appending the relative path to some paths and testing to see if they exist. As of FlightGear v3.7, these paths are the TerraSync directory (tested first) and [[$FG_ROOT]]. &lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = A relative path as a string.&lt;br /&gt;
|example1 = var path = finddata(&amp;quot;Aircraft/Generic&amp;quot;);&lt;br /&gt;
print(path); # prints the absolute path to $FG_ROOT/Aircraft/Generic&lt;br /&gt;
|example2 = var path = finddata(&amp;quot;Airports&amp;quot;);&lt;br /&gt;
print(path); # prints the absolute path to &amp;lt;TerraSync dir&amp;gt;/Airports&lt;br /&gt;
|example3 = var path = finddata(&amp;quot;preferences.xml&amp;quot;);&lt;br /&gt;
print(path); # prints the absolute path to $FG_ROOT/preferences.xml&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===flightplan()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = flightplan([path]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1738|t=Source}}&lt;br /&gt;
|text = {{see also|Nasal Flightplan}}&lt;br /&gt;
Returns a flight plan object, either one for the current flight plan, or one loaded from a given path.&lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = Optional path to flight plan XML file.&lt;br /&gt;
|example1text = Gets the active flight plan and gets the ID of the current waypoint. Note that this example requires a flight plan to be set in the [[Route Manager]] first.&lt;br /&gt;
|example1 = var fp = flightplan();&lt;br /&gt;
print(fp.getWP(fp.current).id);&lt;br /&gt;
|example2text = Creates a new flight plan from an XML file and prints the IDs of the waypoints. Note that this example requires a flight plan to have been created and saved as &amp;lt;tt&amp;gt;''[[$FG_HOME]]/fp-demo.xml''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|example2 = var path = getprop('/sim/fg-home') ~ '/fp-demo.xml';&lt;br /&gt;
var fp = flightplan(path);&lt;br /&gt;
for(var i = 0; i &amp;lt; fp.getPlanSize(); i += 1){&lt;br /&gt;
    print(fp.getWP(i).id);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===geodinfo()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = geodinfo(lat, lon[, max_alt]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=981|t=Source}}&lt;br /&gt;
|text = Returns a vector containing two entries or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; if no information could be obtained because the terrain tile wasn't loaded. The first entry in the vector is the elevation (in meters) for the given point, and the second is a hash with information about the assigned material (as defined in &amp;lt;tt&amp;gt;''[[$FG_ROOT]]/Materials''&amp;lt;/tt&amp;gt;), or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; if there was no material information available (for example, because there is an untextured building at that location). The structure of the hash is as follows (see also {{readme file|materials}}):&lt;br /&gt;
* '''light_coverage:''' The coverage of a single point of light in m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;.&lt;br /&gt;
* '''bumpiness:''' Normalized bumpiness factor for the material.&lt;br /&gt;
* '''load_resistance:''' The amount of pressure in N/m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; the material can withstand without deformation.&lt;br /&gt;
* '''solid:''' 1 (true) or false (0) depending on whether the material is solid or not.&lt;br /&gt;
* '''names:''' Vector of scenery types (usually generated by [[TerraGear]]) that will use this material. &lt;br /&gt;
* '''friction_factor:''' Normalized friction factor of the material.&lt;br /&gt;
* '''rolling_friction:''' The rolling friction coefficient of the material.&lt;br /&gt;
&lt;br /&gt;
Note that this function is a ''very'' CPU-intensive operation, particularly in FlightGear v2.4 and earlier. It is advised to use this function as little as possible.&lt;br /&gt;
|param1 = lat&lt;br /&gt;
|param1text = Latitude, inputted as a number.&lt;br /&gt;
|param2 = lon&lt;br /&gt;
|param2text = Longitude, inputted as a number.&lt;br /&gt;
|param3 = max_alt&lt;br /&gt;
|param3text = The altitude, in metres, from which the function will begin searching for the height of the terrain. Defaults to 10,000 metres. If the terrain is higher than this argument specifies, &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; will be returned.&lt;br /&gt;
|example1text = Dumps information about ground underneath the aircraft.&lt;br /&gt;
|example1 = var pos = geo.aircraft_position();&lt;br /&gt;
var info = geodinfo(pos.lat(), pos.lon());&lt;br /&gt;
debug.dump(info);&lt;br /&gt;
|example2text = Prints whether the ground underneath the aircraft is solid or is water.&lt;br /&gt;
|example2 = var pos = geo.aircraft_position();&lt;br /&gt;
var info = geodinfo(pos.lat(), pos.lon());&lt;br /&gt;
if (info != nil and info[1] != nil) {&lt;br /&gt;
    print(&amp;quot;The ground underneath the aircraft is &amp;quot;, info[1].solid == 1 ? &amp;quot;solid.&amp;quot; : &amp;quot;water.&amp;quot;);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== geodtocart() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = geodtocart(lat, lon, alt);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=962|t=Source}}&lt;br /&gt;
|text = Converts {{wikipedia|geodetic coordinates}} (latitude, longitude, and altitude) to {{wikipedia|ECEF|Earth-centered, Earth-fixed}} coordinates (x, y and z). A vector is returned containing x, y, and z in metres. The equatorial radius of earth used is that defined by the {{wikipedia|WGS 84}} (6,378,137 metres). All argument are mandatory.&lt;br /&gt;
|param1 = lat&lt;br /&gt;
|param1text = Latitude, in degrees.&lt;br /&gt;
|param2 = lon&lt;br /&gt;
|param2text = Longitude, in degrees.&lt;br /&gt;
|param3 = alt&lt;br /&gt;
|param3text = Altitude, in metres.&lt;br /&gt;
|example1 = var (x, y, z) = geodtocart(0, 0, 0); # point is the intersection of the prime meridian and equator.&lt;br /&gt;
print(&amp;quot;x: &amp;quot;, x); # prints &amp;quot;x: 6378137&amp;quot;&lt;br /&gt;
print(&amp;quot;y: &amp;quot;, y); # prints &amp;quot;y: 0&amp;quot;&lt;br /&gt;
print(&amp;quot;z: &amp;quot;, z); # prints &amp;quot;y: 0&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== get_cart_ground_intersection()===&lt;br /&gt;
Introduced in 2017.2.1, see [[Terrain Detection]].&lt;br /&gt;
&lt;br /&gt;
===getprop()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;getprop(path[, path[, ...]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=345|t=Source}}&lt;br /&gt;
|text = Returns the value of a node in the [[Property Tree]] or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; if the node does not exist or the value is not a number (NaN).&lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = There needs to be at least one argument, but there is no limit to the maximum amount of arguments that can be given. The arguments will be concatenated together to form a property tree path. The arguments must be strings, but in FlightGear v3.2 onwards, there is also support (added by {{flightgear commit|34ed79}}) for numeric arguments as indices. See example 2 below.&lt;br /&gt;
|example1 = print(&amp;quot;You have FlightGear v&amp;quot;, getprop(&amp;quot;/sim/version/flightgear&amp;quot;)); # prints FlightGear version&lt;br /&gt;
|example2text = Note that the example below will only work in FlightGear 3.2 and above.&lt;br /&gt;
|example2 = for(var i = 0; i &amp;lt; 8; i += 1){&lt;br /&gt;
    print(&amp;quot;View #&amp;quot;, i + 1, &amp;quot; is named &amp;quot;, getprop(&amp;quot;/sim/view&amp;quot;, i, &amp;quot;name&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
|example3text = Same as above, but is supported by all versions of FlightGear.&lt;br /&gt;
|example3 = for(var i = 0; i &amp;lt; 8; i += 1){&lt;br /&gt;
    print(&amp;quot;View #&amp;quot;, i + 1, &amp;quot; is named &amp;quot;, getprop(&amp;quot;/sim/view[&amp;quot; ~ i ~ &amp;quot;]/name&amp;quot;));&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
==== See also====&lt;br /&gt;
{{note| If you have to read/write the same property multiple times (e.g. in an update loop), it is more efficient to use a node object: &lt;br /&gt;
To get a Node rather than its value, use &amp;lt;code&amp;gt;props.globals.getNode()&amp;lt;/code&amp;gt; - see [[Nasal_library/props]]. }}&lt;br /&gt;
&lt;br /&gt;
===greatCircleMove()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = greatCircleMove([pos, ]course, dist);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1681|t=Source}}&lt;br /&gt;
|text = Calculates a new set of geodetic coordinates using inputs of course and distance, either from the aircraft's current position (by default) or from another set of coordinates. Returns a hash containing two members, ''lat'' and ''lon'' (latitude and longitude respectively).&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to calculate from. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost object.&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A &amp;lt;code&amp;gt;geo.Coord&amp;lt;/code&amp;gt; object&lt;br /&gt;
:* A lat/lon pair, that is, a pair of numbers (latitude followed by longitude) separated by a comma: &amp;lt;code&amp;gt;greatCircleMove(lat,lon, ...)&amp;lt;/code&amp;gt;.&lt;br /&gt;
|param2 = course&lt;br /&gt;
|param2text = Course to new set of coordinates, in degrees (in the range 0–360).&lt;br /&gt;
|param3 = dist&lt;br /&gt;
|param3text = Distance in nautical miles to the new set of coordinates.&lt;br /&gt;
|example1 = var pos = greatCircleMove(0,0, 0, 1);&lt;br /&gt;
debug.dump(pos); # print hash with coordinates&lt;br /&gt;
|example2 = var fix = findFixesByID(&amp;quot;POGIC&amp;quot;);&lt;br /&gt;
fix = fix[0];&lt;br /&gt;
var pos = greatCircleMove(fix, 45, 10);&lt;br /&gt;
debug.dump(pos); # print hash with coordinates&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===interpolate()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|private = _interpolate()&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;interpolate(prop, value1, time1[, value2, time2[, ...]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=522|t=Part 1}} {{!}} {{fgdata file|Nasal/globals.nas|t=Part 2}}&lt;br /&gt;
|text = Linearly interpolates a node in the property tree to a given value in a specified time. The value/time pairs will be run one after the other in the order that they are passed to the function. Note that the interpolation will continue even when the simulation is paused.&lt;br /&gt;
|param1 = prop&lt;br /&gt;
|param1text = String or &amp;lt;code&amp;gt;props.Node&amp;lt;/code&amp;gt; object that indicates a node in the property tree to be used.&lt;br /&gt;
|param2 = value''n''&lt;br /&gt;
|param2text = Target value to change the property to in the set amount of time. This should be a number.&lt;br /&gt;
|param3 = time''n''&lt;br /&gt;
|param3text = Time in seconds, that will be taken for the interpolation.&lt;br /&gt;
|example1text = Paste the code below into the Nasal Console and execute. Then, open the Property Browser and look for the property. Finally, run the code again, and watch the value of the property change.&lt;br /&gt;
|example1 = setprop(&amp;quot;/test&amp;quot;, 0); # (re-)set property&lt;br /&gt;
interpolate(&amp;quot;/test&amp;quot;,&lt;br /&gt;
    50, 5, # interpolate to 50 in 5 seconds&lt;br /&gt;
    10, 2, # interpolate to 10 in 2 seconds&lt;br /&gt;
    0, 5); # interpolate to 0 in 5 seconds&lt;br /&gt;
|example2 = # Apply the left brake at 20% per second&lt;br /&gt;
var prop = &amp;quot;controls/gear/brake-left&amp;quot;;&lt;br /&gt;
var dist = 1 - getprop(prop);&lt;br /&gt;
if (dist == 1) {&lt;br /&gt;
    interpolate(prop, 1, dist / 0.2);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===isa()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = isa(object, class);&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|text = Checks if an object is an instance of, or inherits from, a second object (or class), returning 1 (true) if it is and 0 (false) if otherwise.&lt;br /&gt;
|param1 = object&lt;br /&gt;
|param1text = Object to check.&lt;br /&gt;
|param2 = class&lt;br /&gt;
|param2text = Class/object to check that '''object''' inherits from or is an instance of.&lt;br /&gt;
|example1 = var coord = geo.Coord.new();&lt;br /&gt;
if(isa(coord, geo.Coord)){&lt;br /&gt;
    print(&amp;quot;Variable 'coord' is an instance of class 'geo.Coord'&amp;quot;); # this one will be printed&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Variable 'coord' is not an instance of class 'geo.Coord'&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
|example2 = var coord = geo.Coord.new();&lt;br /&gt;
if(isa(coord, props.Node)){&lt;br /&gt;
    print(&amp;quot;Variable 'coord' is an instance of class 'props.Node'&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
    print(&amp;quot;Variable 'coord' is not an instance of class 'props.Node'&amp;quot;); # this one will be printed&lt;br /&gt;
}&lt;br /&gt;
|example3text = The example below demonstrates checking of inheritance.&lt;br /&gt;
|example3 = var Const = {&lt;br /&gt;
    constant: 2,&lt;br /&gt;
    getConst: func {&lt;br /&gt;
        return me.constant;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var Add = {&lt;br /&gt;
    new: func {&lt;br /&gt;
        return { parents: [Add, Const] };&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    addToConst: func(a){&lt;br /&gt;
        return a * me.getConst();&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var m = Add.new();&lt;br /&gt;
print(m.addToConst(4));&lt;br /&gt;
&lt;br /&gt;
if(isa(m, Add)) print(&amp;quot;Variable 'm' is an instance of class 'Add'&amp;quot;); # will be printed&lt;br /&gt;
if(isa(m, Const)) print(&amp;quot;Variable 'm' is an instance of class 'Const'&amp;quot;); # will also be printed&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===logprint()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;logprint(priority[, msg[, msg[, ...]]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=431|t=Source}}&lt;br /&gt;
|text = Concatenates a message and logs it with a given priority level. Unlike {{func link|print()}} and {{func link|printlog()}}, message outputted by this function will be logged in your &amp;lt;code&amp;gt;[[Commonly used debugging tools#fgfs.log|fgfs.log]]&amp;lt;/code&amp;gt; file as coming from the Nasal file itself rather than from {{flightgear file|src/Scripting/NasalSys.cxx}}.&lt;br /&gt;
|param1 = priority&lt;br /&gt;
|param1text = Number specifying the priority level of the outputted message:&lt;br /&gt;
:{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number !! Debug type&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 1 {{!!}} Bulk&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 2 {{!!}} Debug&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 3 {{!!}} Info&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 4 {{!!}} Warn&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 5 {{!!}} Alert&lt;br /&gt;
{{!}}}&lt;br /&gt;
|param2 = msg&lt;br /&gt;
|param2text = The message. There is no limit to the arguments you give give. They will be concatenated together before logging.&lt;br /&gt;
|example1 = # logs the value of pi to three decimal places with log level 3&lt;br /&gt;
logprint(3, &amp;quot;pi = &amp;quot;, sprintf(&amp;quot;%.3f&amp;quot;, math.pi));&lt;br /&gt;
|example2 = logprint(5, &amp;quot;Alert! This is an important message!&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
{{note| &lt;br /&gt;
The following constants have been added to the development branch of FlightGear (&amp;quot;next&amp;quot;) and will be releases with FG 2020.1 so you won't have to remember the numbers anymore:&lt;br /&gt;
&lt;br /&gt;
LOG_BULK, LOG_WARN, LOG_DEBUG, LOG_INFO, LOG_ALERT, DEV_WARN, DEV_ALERT }}&lt;br /&gt;
&lt;br /&gt;
===magvar() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = magvar([pos]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1642|t=Source}}&lt;br /&gt;
|text = Returns the {{wikipedia|magnetic variation}} at a given set of coordinates. The table below gives the magnetic model used depending on the version of FlightGear.&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FlightGear versions !! Model !! Reference date&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 3.6 and above {{!!}} {{wikipedia|World Magnetic Model}} (WMM) 2015 {{!!}} 1 January 2015&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 0.9.11-pre1 to 3.4 {{!!}} WMM 2005 {{!!}} 1 January 2005&lt;br /&gt;
{{!-}}&lt;br /&gt;
{{!}} 0.7.3 to 0.9.10 {{!!}} WMM 2000 {{!!}} 1 January 2000&lt;br /&gt;
{{!}}}&lt;br /&gt;
|param1 = pos&lt;br /&gt;
|param1text = Optional position to calculate from. If not given, the aircraft's current position will be used. Can be one of:&lt;br /&gt;
:* An &amp;lt;code&amp;gt;airport&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;runway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxiway&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fix&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;waypoint&amp;lt;/code&amp;gt; ghost object.&lt;br /&gt;
:* A hash with ''lat'' and ''lon'' members&lt;br /&gt;
:* A &amp;lt;code&amp;gt;geo.Coord&amp;lt;/code&amp;gt; object&lt;br /&gt;
:* A lat/lon pair, that is, a pair of numbers (latitude followed by longitude) separated by a comma: &amp;lt;code&amp;gt;magvar(lat,lon)&amp;lt;/code&amp;gt;.&lt;br /&gt;
|example1 = print(magvar(0, 0)); # prints the magnetic variation at 0, 0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===maketimer() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = maketimer(interval[, self], function);&lt;br /&gt;
|source = ''Implemented using the {{API Link|flightgear|class|TimerObj}} class.''&amp;lt;br&amp;gt;{{flightgear file|src/Scripting/NasalSys.cxx|l=90|t=Part 1}} {{!}} {{flightgear file|src/Scripting/NasalSys.cxx|l=533|t=Part 2}}&lt;br /&gt;
|version = 2.12&lt;br /&gt;
|commit = {{flightgear commit|ab939f|t=commit}}&lt;br /&gt;
|text = Returns a timer object containing the following methods and members:&lt;br /&gt;
* '''start()''': Starts the timer.&lt;br /&gt;
* '''stop()''': Stops the timer.&lt;br /&gt;
* '''restart(interval)''': Restarts the timer with the given interval.&lt;br /&gt;
* '''singleShot''': Bool showing whether the timer is only to be run once, or continuously until told to stop. Can be both set and read from (see examples).&lt;br /&gt;
* '''isRunning''': Read-only bool telling whether the timer is currently running.&lt;br /&gt;
* '''simulatedTime''': (FG 2017.1+; {{flightgear commit|0af316|t=commit}}) Bool telling whether the timer is using simulated time (which accounts for pause, etc.). Defaults to false (use real time). Can be both read and set. This cannot be changed while the timer is running.&lt;br /&gt;
Unlike {{func link|settimer()}}, which it replaces, &amp;lt;code&amp;gt;maketimer()&amp;lt;/code&amp;gt; provides more control over the timer. In addition, it can help reduce memory usage.&lt;br /&gt;
|param1 = interval&lt;br /&gt;
|param1text = Interval in seconds for the timer.&lt;br /&gt;
|param2 = self&lt;br /&gt;
|param2text = Optional parameter specifying what any &amp;lt;code&amp;gt;'''me'''&amp;lt;/code&amp;gt; references in the function being called will refer to.&lt;br /&gt;
|param3 = function&lt;br /&gt;
|param3text = Function to be called at the given interval.&lt;br /&gt;
|example1 = var timer = maketimer(1, func(){&lt;br /&gt;
    print(&amp;quot;Hello, World!&amp;quot;); # print &amp;quot;Hello, World!&amp;quot; once every second (call timer.stop() to stop it)&lt;br /&gt;
});&lt;br /&gt;
timer.start();&lt;br /&gt;
|example2 = var timer = maketimer(1, math, func(){&lt;br /&gt;
    print(me.math); # 'me' reference is the 'math' namespace&lt;br /&gt;
});&lt;br /&gt;
timer.singleShot = 1; # timer will only be run once&lt;br /&gt;
timer.start();&lt;br /&gt;
|example3 = var timer = maketimer(1, func(){&lt;br /&gt;
    print(&amp;quot;Hello, World!&amp;quot;); # print &amp;quot;Hello, World!&amp;quot; once every second (call timer.stop() to stop it)&lt;br /&gt;
});&lt;br /&gt;
timer.start();&lt;br /&gt;
print(timer.isRunning); # prints 1&lt;br /&gt;
|example4text = In the example below, &amp;quot;Hello, World!&amp;quot; will be printed after one second the first time, and after two seconds thereafter.&lt;br /&gt;
|example4 = var update = func(){&lt;br /&gt;
    print(&amp;quot;Hello, World!&amp;quot;);&lt;br /&gt;
    timer.restart(2); # restarts the timer with a two second interval&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var timer = maketimer(1, update);&lt;br /&gt;
timer.singleShot = 1;&lt;br /&gt;
timer.start();&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===maketimestamp()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = maketimestamp()&lt;br /&gt;
|source = ''Implemented using the {{API Link|flightgear|class|TimeStampObj}} class.''&amp;lt;br&amp;gt;{{flightgear file|src/Scripting/NasalSys.cxx|l=214|t=Part 1}} {{!}} {{flightgear file|src/Scripting/NasalSys.cxx|l=589|t=Part 2}}&lt;br /&gt;
|version = 2019.2&lt;br /&gt;
|commit = {{flightgear commit|7db06300|t=commit}}&lt;br /&gt;
|text = Returns a time stamp object to allow high resolution timing of Nasal operations. When created the timer will automatically be stamped. The object has the following methods:&lt;br /&gt;
* '''stamp()''': Resets the timing operation. Call this first.&lt;br /&gt;
* '''elapsedMSec()''': returns number of milliseconds elapsed since stamp() called. Resolution may vary depending on platform but is usually at least millisecond accuracy.&lt;br /&gt;
* '''elapsedUSec()''': returns number of microseconds elapsed since stamp() called. Resolution may vary depending on platform but is usually at least millisecond accuracy.&lt;br /&gt;
|&lt;br /&gt;
|example1text = In the example below the number of milliseconds elapsed will be printed.&lt;br /&gt;
|example1 = var timestamp = maketimestamp();&lt;br /&gt;
timestamp.stamp();&lt;br /&gt;
print(timestamp.elapsedMSec(), &amp;quot;ms elapsed&amp;quot;);&lt;br /&gt;
print(timestamp.elapsedMSec(), &amp;quot;ms elapsed&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===md5()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = md5(string);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=758|t=Source}}&lt;br /&gt;
|version = 3.2&lt;br /&gt;
|commit = {{flightgear commit|cfbf9e|t=commit}}&lt;br /&gt;
|text = Returns a the {{wikipedia|MD5}} hash (as a string) of the inputted string.&lt;br /&gt;
|param1 = string&lt;br /&gt;
|param1text = String the generate the hash of. Mandatory.&lt;br /&gt;
|example1text = The below code should output &amp;lt;code&amp;gt;65a8e27d8879283831b664bd8b7f0ad4&amp;lt;/code&amp;gt;.&lt;br /&gt;
|example1 = print(md5(&amp;quot;Hello, World!&amp;quot;));&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===navinfo()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = navinfo(lat, lon, type, id);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1453|t=Source}}&lt;br /&gt;
|text = Returns vector &amp;lt;code&amp;gt;navaid&amp;lt;/code&amp;gt; ghost objects matching the given '''type''' and '''id''' or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; on error.&lt;br /&gt;
|param1 = lat ''and'' lon&lt;br /&gt;
|param1text = If given, the returned navaids will be put into order of ascending distance from the location.&lt;br /&gt;
|param2 = type&lt;br /&gt;
|param2text = Narrows the search to the given type. Must be one of &amp;quot;any,&amp;quot; &amp;quot;fix,&amp;quot; &amp;quot;vor,&amp;quot; &amp;quot;ndb,&amp;quot; &amp;quot;ils,&amp;quot; &amp;quot;dme,&amp;quot; or &amp;quot;tacan.&amp;quot; Defaults to the equivalent of &amp;quot;any.&amp;quot;&lt;br /&gt;
|param3 = id&lt;br /&gt;
|param3text = ID to search for. Note that, although all the parameters are technically optional, this parameter must be given, otherwise an empty vector will be returned.&lt;br /&gt;
|example1 = navinfo(&amp;quot;vor&amp;quot;); # returns all VORs&lt;br /&gt;
|example2 = navinfo(&amp;quot;HAM&amp;quot;); # return all navaids whose names start with &amp;quot;HAM&amp;quot;&lt;br /&gt;
|example3 = navinfo(&amp;quot;vor&amp;quot;, &amp;quot;HAM&amp;quot;); # return all VORs whose names start with &amp;quot;HAM&amp;quot;&lt;br /&gt;
|example4 = navinfo(34,48,&amp;quot;vor&amp;quot;,&amp;quot;HAM&amp;quot;); # return all VORs whose names start with &amp;quot;HAM&amp;quot; and sorted by distance relative to 34°, 48°&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===parse_markdown()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = parse_markdown(markdown);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=745|t=Part 1}} {{!}} {{simgear file|simgear/misc/SimpleMarkdown.cxx|t=Part 2}} &lt;br /&gt;
|version = 3.2&lt;br /&gt;
|text = Parses a string containing {{wikipedia|Markdown}} and returns the result as a string. As of FlightGear 2016.1, it is just a simple parser, and does the following:&lt;br /&gt;
* It strips whitespace from the beginning of the string.&lt;br /&gt;
* It supports [http://daringfireball.net/projects/markdown/syntax#p paragraphs and line breaks].&lt;br /&gt;
* It collapses whitespace.&lt;br /&gt;
* It converts unordered [http://daringfireball.net/projects/markdown/syntax#list lists] to use a bullet character (&amp;amp;bull;). Note that the bullet character is implemented in hexadecimal UTF-8 character bytes (&amp;lt;code&amp;gt;E2 80 A2&amp;lt;/code&amp;gt;), as so may not work properly when the being displayed in an encoding other than UTF-8.&lt;br /&gt;
|param1 = markdown&lt;br /&gt;
|param1text = String containing Markdown to be parsed.&lt;br /&gt;
|example1text = &lt;br /&gt;
Save the below code as &amp;lt;tt&amp;gt;''[[$FG_ROOT]]/gui/dialogs/test.xml''&amp;lt;/tt&amp;gt;, then run the Nasal code below it to open the dialog. To change the markdown to be parsed, simply change the code in the highlighted section, save it, and reload the GUI (&amp;lt;tt&amp;gt;Debug &amp;gt; Reload GUI&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; highlight=&amp;quot;41-50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;name&amp;gt;test&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;layout&amp;gt;vbox&amp;lt;/layout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;group&amp;gt;&lt;br /&gt;
    &amp;lt;layout&amp;gt;hbox&amp;lt;/layout&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;empty&amp;gt;&lt;br /&gt;
        &amp;lt;stretch&amp;gt;true&amp;lt;/stretch&amp;gt;&lt;br /&gt;
    &amp;lt;/empty&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;text&amp;gt;&lt;br /&gt;
        &amp;lt;label&amp;gt;parse_markdown() test dialog&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;/text&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;empty&amp;gt;&lt;br /&gt;
        &amp;lt;stretch&amp;gt;true&amp;lt;/stretch&amp;gt;&lt;br /&gt;
    &amp;lt;/empty&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;button&amp;gt;&lt;br /&gt;
        &amp;lt;legend&amp;gt;&amp;lt;/legend&amp;gt;&lt;br /&gt;
        &amp;lt;pref-width&amp;gt;16&amp;lt;/pref-width&amp;gt;&lt;br /&gt;
        &amp;lt;pref-height&amp;gt;16&amp;lt;/pref-height&amp;gt;&lt;br /&gt;
        &amp;lt;binding&amp;gt;&lt;br /&gt;
            &amp;lt;command&amp;gt;dialog-close&amp;lt;/command&amp;gt;&lt;br /&gt;
        &amp;lt;/binding&amp;gt;&lt;br /&gt;
    &amp;lt;/button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;canvas&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;Canvas plot&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;stretch&amp;gt;true&amp;lt;/stretch&amp;gt;&lt;br /&gt;
    &amp;lt;pref-width&amp;gt;400&amp;lt;/pref-width&amp;gt;&lt;br /&gt;
    &amp;lt;pref-height&amp;gt;300&amp;lt;/pref-height&amp;gt;&lt;br /&gt;
    &amp;lt;nasal&amp;gt;&lt;br /&gt;
        &amp;lt;load&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;
var text = 'Items:&lt;br /&gt;
* apples&lt;br /&gt;
* oranges&lt;br /&gt;
* pears&lt;br /&gt;
&lt;br /&gt;
Some text.&lt;br /&gt;
Some more items:&lt;br /&gt;
* apples&lt;br /&gt;
* oranges&lt;br /&gt;
* pears';&lt;br /&gt;
&lt;br /&gt;
var parsed = parse_markdown(text);&lt;br /&gt;
&lt;br /&gt;
var root_canvas = canvas.get(cmdarg());&lt;br /&gt;
root_canvas.setColorBackground(255, 255, 255);&lt;br /&gt;
var root = root_canvas.createGroup();&lt;br /&gt;
&lt;br /&gt;
var text_dis = root.createChild(&amp;quot;text&amp;quot;)&lt;br /&gt;
    .setText(parsed)&lt;br /&gt;
    .setTranslation(5, 5)&lt;br /&gt;
    .setFont(&amp;quot;LiberationFonts\LiberationSans-Regular.ttf&amp;quot;)&lt;br /&gt;
    .setFontSize(15)&lt;br /&gt;
    .setColor(0, 0, 0)&lt;br /&gt;
    .setDrawMode(canvas.Text.TEXT)&lt;br /&gt;
    .setAlignment(&amp;quot;left-top&amp;quot;);&lt;br /&gt;
        ]]&amp;gt;&amp;lt;/load&amp;gt;&lt;br /&gt;
    &amp;lt;/nasal&amp;gt;&lt;br /&gt;
&amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|example1 = fgcommand(&amp;quot;dialog-show&amp;quot;, {&amp;quot;dialog-name&amp;quot;: &amp;quot;test&amp;quot;});&lt;br /&gt;
|example2text = The example below parses Markdown and outputs it in a HTML document. The parsed text is placed in &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; inline&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; tags. To change the Markdown to be parsed, simply edit the variable &amp;lt;tt&amp;gt;markdown&amp;lt;/tt&amp;gt; at the top of the code.&lt;br /&gt;
|example2 = &amp;lt;nowiki&amp;gt;var markdown = 'Items:&lt;br /&gt;
* apples&lt;br /&gt;
* oranges&lt;br /&gt;
* pears&lt;br /&gt;
&lt;br /&gt;
Some text.&lt;br /&gt;
Some more items:&lt;br /&gt;
* apples&lt;br /&gt;
* oranges&lt;br /&gt;
* pears';&lt;br /&gt;
&lt;br /&gt;
var parsed = parse_markdown(markdown);&lt;br /&gt;
&lt;br /&gt;
debug.dump(parsed);&lt;br /&gt;
&lt;br /&gt;
var path = string.normpath(getprop(&amp;quot;/sim/fg-home&amp;quot;) ~ '/Export/parse_markdown()-test.html');&lt;br /&gt;
&lt;br /&gt;
var file = io.open(path, &amp;quot;w&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
var html = &amp;quot;&amp;lt;!DOCTYPE html&amp;gt;\n\n&amp;lt;html&amp;gt;\n\n&amp;lt;head&amp;gt;\n\t&amp;lt;meta charset=\&amp;quot;UTF-8\&amp;quot;&amp;gt;\n\t&amp;lt;title&amp;gt;parse_markdown() test generated by Nasal&amp;lt;/title&amp;gt;\n&amp;lt;/head&amp;gt;\n\n&amp;lt;body&amp;gt;\n\t&amp;lt;pre&amp;gt;&amp;quot; ~ parsed ~ &amp;quot;&amp;lt;/pre&amp;gt;\n&amp;lt;/body&amp;gt;\n\n&amp;lt;/html&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
io.write(file, html);&lt;br /&gt;
io.close(file);&lt;br /&gt;
print(&amp;quot;Done, file ready for viewing (&amp;quot; ~ path ~ &amp;quot;)&amp;quot;);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===parsexml()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;parsexml(path[, start[, end[, data[, pro_ins]]]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=710|t=Source}}&lt;br /&gt;
|text = This function is an interface into the built-in [http://expat.sourceforge.net/ Expat XML parser]. The absolute path to the file is returned as string, or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; is returned on error.&lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = Mandatory absolute path to the XML file to be parsed.&lt;br /&gt;
|param2 = start&lt;br /&gt;
|param2text = Optional callback function that will be called for every starting tag. The function should take two argument: the tag name and a hash containing attributes.&lt;br /&gt;
|param3 = end&lt;br /&gt;
|param3text = Optional callback function that will be called for every ending tag. The function should take one argument: the tag name.&lt;br /&gt;
|param4 = data&lt;br /&gt;
|param4text = Optional callback function that will be called for every piece of data within a set of tags. The function should take one argument: the data as a string.&lt;br /&gt;
|param5 = pro_ins&lt;br /&gt;
|param5text = Optional callback function that will be called for every {{wikipedia|Processing Instruction|processing instruction}}. The function should take two argument: the target and the data string.&lt;br /&gt;
|example1text = Save the below XML code in &amp;lt;tt&amp;gt;''[[$FG_HOME]]/Export/demo.xml''&amp;lt;/tt&amp;gt;. Then, execute the Nasal code below in the Nasal Console. The XML will be parsed and each bit of the code will be printed.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;style.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo&amp;gt;&lt;br /&gt;
  &amp;lt;blah type=&amp;quot;string&amp;quot;&amp;gt;&amp;lt;![CDATA[ &amp;lt;sender&amp;gt;John Smith&amp;lt;/sender&amp;gt; ]]&amp;gt;&amp;lt;/blah&amp;gt;&lt;br /&gt;
  &amp;lt;blah2 type=&amp;quot;string&amp;quot;&amp;gt;Orange &amp;amp;amp; lemons&amp;lt;/blah2&amp;gt;&lt;br /&gt;
&amp;lt;/foo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|example1 = var start = func(name, attr){&lt;br /&gt;
    print(&amp;quot;Starting tag: '&amp;quot;, name, &amp;quot;'&amp;quot;);&lt;br /&gt;
    foreach(var a; keys(attr)){&lt;br /&gt;
        print(&amp;quot;\twith attribute &amp;quot;, a, '=&amp;quot;', attr[a], '&amp;quot;');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var end = func(name){&lt;br /&gt;
    print(&amp;quot;Ending tag: '&amp;quot;, name, &amp;quot;'&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var data = func(data){&lt;br /&gt;
    print(&amp;quot;Data = '&amp;quot;, data, &amp;quot;'&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var pro_instr = func(target, data){&lt;br /&gt;
    print(&amp;quot;Processing instruction: target = '&amp;quot;, target, &amp;quot;', data = '&amp;quot;, data, &amp;quot;'&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
parsexml(getprop(&amp;quot;/sim/fg-home&amp;quot;) ~ '/Export/demo.xml', start, end, data, pro_instr);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===print()===&lt;br /&gt;
{{Note|As of 07/2020, we are in the process of slowly deprecating and removing Nasal print() (in fgdata) where possible in favor of log [[#logprint()]] which takes a priority level.&lt;br /&gt;
&lt;br /&gt;
This is part of the goal that we achieve zero output at log-level at alert, and everything shown at ‘warn; is really a warning, not just information.&amp;lt;ref&amp;gt;https://sourceforge.net/p/flightgear/mailman/message/37042224/&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;print(data[, data[, ...]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=415|t=Source}}&lt;br /&gt;
|text = Concatenates its arguments and then prints it to the terminal and the [[Commonly used debugging tools#fgfs.log|log]]. Note that a newline is automatically added.&lt;br /&gt;
|param1 = data&lt;br /&gt;
|param1text = Data to print. Only strings and numbers can be printed; other data types will not be. There many be any number of arguments; they will just be concatenated together.&lt;br /&gt;
|example1 = print(&amp;quot;Just&amp;quot;, &amp;quot; a &amp;quot;, &amp;quot;test&amp;quot;); # prints &amp;quot;Just a test&amp;quot;&lt;br /&gt;
|example2 = print(&amp;quot;pi = &amp;quot;, math.pi); # prints &amp;quot;pi = 3.141592...&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== printf() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;printf(format[, arg[, arg, [...]]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|text = Creates and prints a formatted string. For a description of its arguments, see {{func link|sprintf()}} (it is, in fact, implemented using &amp;lt;code&amp;gt;sprintf()&amp;lt;/code&amp;gt;).&lt;br /&gt;
|example1 = printf(&amp;quot;In hexadecimal, 100000 = %X&amp;quot;, 186A0); # prints &amp;quot;In hexadecimal, 100000 = 186A0&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===printlog()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;printlog(level, data[, data[, ...]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|text = Prints the given message with the given log level. If the log level is higher or equal to &amp;lt;code&amp;gt;/sim/logging/priority&amp;lt;/code&amp;gt;, it is printed.&lt;br /&gt;
|param1 = level&lt;br /&gt;
|param1text = Mandatory log level as a string. Must be one of &amp;quot;none,&amp;quot; &amp;quot;bulk,&amp;quot; &amp;quot;debug,&amp;quot; &amp;quot;info,&amp;quot; &amp;quot;warn,&amp;quot; or &amp;quot;alert.&amp;quot; Note that &amp;quot;none&amp;quot; will mean that the message will never be printed.&lt;br /&gt;
|param2 = data&lt;br /&gt;
|param2text = Data to be printed. Only strings and numbers will be printed; others will not be. There may be any number of arguments; they will just be concatenated together.&lt;br /&gt;
|example1 = printlog(&amp;quot;alert&amp;quot;, &amp;quot;This is an alert&amp;quot;); # message will be printed&lt;br /&gt;
|example2 = printlog(&amp;quot;info&amp;quot;, &amp;quot;Just informing you about something&amp;quot;); # message will be printed only if log level is set to &amp;quot;info&amp;quot; or less&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===rand()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = rand();&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=554|t=Source}}&lt;br /&gt;
|text = Returns a random floating point number between 0 (inclusive) and 1 (exclusive). It takes no arguments.&lt;br /&gt;
|example1 = print(rand()); # prints random number&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===registerFlightPlanDelegate()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = registerFlightPlanDelegate(init_func);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1879|t=Source}}&lt;br /&gt;
|text = Registers a flight plan delegate. See &amp;lt;tt&amp;gt;''{{fgdata file|Nasal/route_manager.nas|t=$FG_ROOT/Nasal/route_manager.nas}}''&amp;lt;/tt&amp;gt; for examples.&lt;br /&gt;
|param1 = init_func&lt;br /&gt;
|param1text = Initialization function which will be called during FlightGear's startup.&lt;br /&gt;
}}&lt;br /&gt;
===removecommand()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = removecommand(cmd);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=668|t=Source}}&lt;br /&gt;
|text = Removes the given fgcommand. Returns &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{caution|This will remove '''any''' [[fgcommands|fgcommand]], even those implemented in C++, so use with caution!}}&lt;br /&gt;
|param1 = cmd&lt;br /&gt;
|param1text = String specifying the name of the command to remove.&lt;br /&gt;
|example1 = addcommand(&amp;quot;hello&amp;quot;, func(){&lt;br /&gt;
    print(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
fgcommand(&amp;quot;hello&amp;quot;); # &amp;quot;Hello&amp;quot; will be printed&lt;br /&gt;
removecommand(&amp;quot;hello&amp;quot;); # removes it&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===removelistener()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = removelistener(id);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=1384|t=Part 1}} {{!}} {{flightgear file|src/Scripting/NasalSys.cxx|l=506|t=Part 2}}&lt;br /&gt;
|text = Removes and deactivates the given listener and returns the number of listeners left or &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt; on error.&lt;br /&gt;
{{note|It is good practice to remove listeners when they are not required anymore. This prevents the listeners reducing FlightGear's run performance.}}&lt;br /&gt;
|param1 = id&lt;br /&gt;
|param1text = ID of listener as returned by {{func link|setlistener()}}.&lt;br /&gt;
|example1 = var ls = setlistener(&amp;quot;/sim/test&amp;quot;, func(){&lt;br /&gt;
    print(&amp;quot;Property '/sim/test' has been changed&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
setprop(&amp;quot;/sim/test&amp;quot;, &amp;quot;blah&amp;quot;); # trigger listener&lt;br /&gt;
var rem = removelistener(ls); # remove listener&lt;br /&gt;
print(&amp;quot;There are &amp;quot;, rem, &amp;quot; listeners remaining&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===resolvepath()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = resolvepath(path);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=604|t=Source}}&lt;br /&gt;
|text = Takes a relative path as a string and uses [[SimGear]]'s path-resolving framework to return an absolute path as a string. If the path could not be resolved, an empty string is returned. See [[Resolving Paths]] for a detailed description of the algorithm. This function can also be used to check if a file exists.&lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = Relative path to be completed.&lt;br /&gt;
|example1 = print(resolvepath(&amp;quot;Nasal/globals.nas&amp;quot;)); # prints the equivalent of $FG_ROOT/Nasal/globals.nas&lt;br /&gt;
|example2 = print(resolvepath(&amp;quot;blah&amp;quot;)); # prints nothing; could not be resolved&lt;br /&gt;
|example3 = var file_path = resolvepath(&amp;quot;Aircraft/SenecaII/some-file&amp;quot;);&lt;br /&gt;
if (file_path != &amp;quot;&amp;quot;){&lt;br /&gt;
    gui.popupTip(&amp;quot;some-file found&amp;quot;, 2);&lt;br /&gt;
} else {&lt;br /&gt;
    gui.popupTip(&amp;quot;some-file not found&amp;quot;, 2);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===setlistener()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;setlistener(node, code[, init[, type]]);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|private = _setlistener()&lt;br /&gt;
|source = {{flightgear file|src/Scripting/Nasal|l=499|t=Part 1}} {{!}} {{flightgear file|src/Scripting/Nasal|l=1350|t=Part 2}}&amp;lt;br&amp;gt;''Listener implemented using the {{API Link|flightgear|class|FGNasalListener}} class.''&lt;br /&gt;
|text = Creates a listener which will be triggered when the given property is changed (depending on the '''type'''). A unique integer ID is returned; this can later be used as the argument to {{func link|removelistener()}}.&lt;br /&gt;
{{note|Listeners are known to be a source of resource leaks. To avoid this, please take measures such as:&lt;br /&gt;
* Using {{func link|removelistener()}} when they are not needed any more.&lt;br /&gt;
* Using a single initialization listener.&lt;br /&gt;
* Avoiding tying listeners to properties that are rapidly updated (e.g., many times per frame).&lt;br /&gt;
}}&lt;br /&gt;
|param1 = node&lt;br /&gt;
|param1text = Mandatory string or &amp;lt;code&amp;gt;props.Node&amp;lt;/code&amp;gt; object pointing to a property in the [[Property Tree]].&lt;br /&gt;
|param2 = code&lt;br /&gt;
|param2text = Mandatory callback function to execute when the listener is triggered. The function can take up to four arguments in the following order:&lt;br /&gt;
* '''changed''': a &amp;lt;code&amp;gt;props.Node&amp;lt;/code&amp;gt; object pointing to the changed node.&lt;br /&gt;
* '''listen''': a &amp;lt;code&amp;gt;props.Node&amp;lt;/code&amp;gt; object pointing to the listened-to node. Note that this argument maybe different depending on the '''type'''.&lt;br /&gt;
* '''mode''': an integer telling how the listener was triggered. 0 means that the value was changed. 1 means that a child property was added. -1 means that a child property was removed.&lt;br /&gt;
* '''is_child''': boolean telling whether '''changed''' is a child property of the listened-to '''node''' or not. 1 (true) if it is, 0 (false) otherwise.&lt;br /&gt;
|param3 = init&lt;br /&gt;
|param3text = If set to 1 (true), the listener will additionally be triggered when it is created. This argument is optional and defaults to 0 (false).&lt;br /&gt;
|param4 = type&lt;br /&gt;
|param4text = Integer specifying the listener's behavior. 0 means that the listener will only trigger when the property is changed. 1 means that the trigger will always be triggered when the property is written to. 2 will mean that the listener will be triggered even if child properties are modified. This argument is optional and defaults to 1.&lt;br /&gt;
|example1 = var prop = props.globals.initNode(&amp;quot;/sim/test&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;STRING&amp;quot;); # create property&lt;br /&gt;
var id = setlistener(&amp;quot;/sim/test&amp;quot;, func(n){ # create listener&lt;br /&gt;
    print(&amp;quot;Value: &amp;quot;, n.getValue());&lt;br /&gt;
});&lt;br /&gt;
setprop(&amp;quot;/sim/test&amp;quot;, &amp;quot;blah&amp;quot;); # trigger listener&lt;br /&gt;
removelistener(id); # remove listener&lt;br /&gt;
prop.remove(); # remove property&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===setprop()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = &amp;lt;nowiki&amp;gt;setprop(path[, path[, ...]], value);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=385|t=Source}}&lt;br /&gt;
|text = Sets the value of a property in the [[Property Tree]]. If the property does not exist, it will be created. Returns 1 (true) on success or 0 (false) if there was an error.&lt;br /&gt;
{{note|If you want to remove a property, you will have to use one of the &amp;lt;code&amp;gt;props&amp;lt;/code&amp;gt; helpers:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
props.globals.getNode(&amp;quot;foo/bar&amp;quot;).remove(); # take out the complete node&lt;br /&gt;
props.globals.getNode(&amp;quot;foo&amp;quot;).removeChild(&amp;quot;bar&amp;quot;); # take out a certain child node&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|param1 = path&lt;br /&gt;
|param1text = There needs to be at least one '''path''' argument, but there is no limit to the maximum amount that can be given. They will be concatenated together to form a property tree path. The arguments must be strings, but in FlightGear v3.2 onwards, there also is support (added by {{flightgear commit|34ed79}}) for numeric arguments as indices. See example 2 below.&lt;br /&gt;
|param2 = value&lt;br /&gt;
|param2text = Value to write to the given property. Must be either a string or a number.&lt;br /&gt;
|example1 = setprop(&amp;quot;/sim/demo&amp;quot;, &amp;quot;This is a demo&amp;quot;);&lt;br /&gt;
|example2text = Note that the example below will only work in FlightGear 3.2 and above.&lt;br /&gt;
|example2 = for(var i = 0; i &amp;lt; 3; i += 1){&lt;br /&gt;
    setprop(&amp;quot;/sim/demo&amp;quot;, i, &amp;quot;Demo #&amp;quot; ~ i));&lt;br /&gt;
}&lt;br /&gt;
|example3text = Same as above, but is supported by all versions of FlightGear.&lt;br /&gt;
|example3 = for(var i = 0; i &amp;lt; 3; i += 1){&lt;br /&gt;
    setprop(&amp;quot;/sim/demo[&amp;quot; ~ i ~ &amp;quot;]&amp;quot;, &amp;quot;Demo #&amp;quot; ~ i));&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
====See also====&lt;br /&gt;
{{note| If you have to read/write the same property multiple times (e.g. in an update loop), it is more efficient to use a node object: &lt;br /&gt;
To get a Node rather than its value, use &amp;lt;code&amp;gt;props.globals.getNode()&amp;lt;/code&amp;gt; - see [[Nasal_library/props]]. }}&lt;br /&gt;
&lt;br /&gt;
===settimer() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = settimer(function, delta[, realtime]);&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=499|t=Part 1}} {{!}} {{flightgear file|src/Scripting/NasalSys.cxx|l=1286|t=Part 2}}&lt;br /&gt;
|text = Runs the given function a specified amount of seconds after the current time. Returns &amp;lt;code&amp;gt;'''nil'''&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{note|Improper use of &amp;lt;code&amp;gt;settimer()&amp;lt;/code&amp;gt; may cause resource leaks. It is also highly recommended that the newer {{func link|maketimer()}} should be used instead of this function.}} &lt;br /&gt;
|param1 = function&lt;br /&gt;
|param1text = Mandatory function that will be called. It may be necessary to enclose code in an anonymous function (see example).&lt;br /&gt;
|param2 = delta&lt;br /&gt;
|param2text = Mandatory amount of time in seconds after which the function will be called.&lt;br /&gt;
|param3 = realtime&lt;br /&gt;
|param3text = If 1 (true), &amp;quot;real time&amp;quot; will be used instead of &amp;quot;simulation time.&amp;quot; Defaults to 0 (false). Note that if &amp;quot;simulation time&amp;quot; is used, the timer will not run while FlightGear is paused.&lt;br /&gt;
|example1 = var myFunc = func(){&lt;br /&gt;
    print(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settimer(myFunc, 2); # runs myFunc after 2 seconds&lt;br /&gt;
|example2 = var sqr = func(a){&lt;br /&gt;
    return a * a;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
settimer(func(){&lt;br /&gt;
    print(sqr(2)); # will print 4 after 2 seconds&lt;br /&gt;
}, 2);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===srand() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = srand();&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=559|t=Source}}&lt;br /&gt;
|text = Makes the pseudorandom number generator (see {{func link|rand()}}) generate a new {{wikipedia|random seed|noicon=1}} based on time. Returns 0.&lt;br /&gt;
}}&lt;br /&gt;
===systime()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = systime();&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalSys.cxx|l=770|t=Source}}&lt;br /&gt;
|text = Returns the {{wikipedia|Unix time}} (seconds since since 00:00:00 UTC, 1/1/1970) as a floating point number with high resolution. This function is useful for benchmarking purposes (see example 2).&lt;br /&gt;
{{note|1=High resolution timers under Windows can produce inaccurate or fixed sub-millisecond results.&amp;lt;ref&amp;gt;{{cite web|url=http://forum.flightgear.org/viewtopic.php?f=30&amp;amp;t=29259|title=Nasal: systime() ??!?|author=Necolatis|date=Apr 2nd, 2016}}&amp;lt;/ref&amp;gt; This is due to the underlying {{func link|GetSystemTimeAsFileTime()|link=https://msdn.microsoft.com/en-us/library/windows/desktop/ms724397(v=vs.85).aspx}} API call, which depends on hardware availability of suitable high resolution timers. See also [https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx Acquiring high-resolution time stamps]}}&lt;br /&gt;
|example1 = print(&amp;quot;Unix time: &amp;quot;, systime()); # prints Unix time&lt;br /&gt;
|example2 = var myFunc = func(){&lt;br /&gt;
    for(var i = 0; i &amp;lt;= 10; i += 1){&lt;br /&gt;
        print(&amp;quot;Interation #&amp;quot;, i);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
var t = systime(); # record time&lt;br /&gt;
myFunc(); # run function&lt;br /&gt;
var t2 = systime(); # record new time&lt;br /&gt;
print(&amp;quot;myFunc() took &amp;quot;, t2 - t, &amp;quot; seconds&amp;quot;); # print result&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===thisfunc()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = thisfunc();&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|text = Returns the function from which this function is called. This allows a function to reliably and safely call itself from within a closure.&lt;br /&gt;
|example1 = var stringify_vec = func(input){&lt;br /&gt;
    if (typeof(input) == &amp;quot;scalar&amp;quot;){&lt;br /&gt;
        return sprintf(&amp;quot;%s&amp;quot;, input);&lt;br /&gt;
    } elsif (typeof(input) == &amp;quot;vector&amp;quot;) {&lt;br /&gt;
        if (size(input) == 0) return &amp;quot;[]&amp;quot;;&lt;br /&gt;
        var this = thisfunc();&lt;br /&gt;
        var buffer = &amp;quot;[&amp;quot;;&lt;br /&gt;
        for(var i = 0; i &amp;lt; size(input); i += 1){&lt;br /&gt;
            buffer ~= this(input[i]);&lt;br /&gt;
            if (i == size(input) - 1) {&lt;br /&gt;
                buffer ~= &amp;quot;]&amp;quot;;&lt;br /&gt;
            } else {&lt;br /&gt;
                buffer ~= &amp;quot;, &amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return buffer;&lt;br /&gt;
    } else {&lt;br /&gt;
        die(&amp;quot;stringify_vec(): Error! Invalid input. Must be a vector or scalar&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var test_vec = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, 1, 2, 3];&lt;br /&gt;
debug.dump(stringify_vec(test_vec)); # prints &amp;quot;[a, b, c, 1, 2, 3]&amp;quot;&lt;br /&gt;
test_vec = [];&lt;br /&gt;
debug.dump(stringify_vec(test_vec)); # prints &amp;quot;[]&amp;quot;&lt;br /&gt;
test_vec = {};&lt;br /&gt;
debug.dump(stringify_vec(test_vec)); # will throw an error&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===tileIndex() ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = tileIndex();&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1720|t=Source}}&lt;br /&gt;
|text = Returns the index of the tile at the aircraft's current position as a string. This corresponds to the name of the STG file of the tile. For example, at [[KSFO]], this would be &amp;lt;code&amp;gt;942050&amp;lt;/code&amp;gt;, corresponding to &amp;lt;tt&amp;gt;''[[$FG_SCENERY]]/Terrain/w130n30/w123n3/942050.stg''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|example1 = print(tileIndex()); # print index&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== tilePath()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = tilePath();&lt;br /&gt;
|source = {{flightgear file|src/Scripting/NasalPositioned.cxx|l=1712|t=Source}}&lt;br /&gt;
|text = Returns the base path of the tile at the aircraft's current position as a string. For example, at KSFO, this would be &amp;lt;code&amp;gt;w130n30/w123n3&amp;lt;/code&amp;gt;, corresponding to &amp;lt;tt&amp;gt;''[[$FG_SCENERY]]/Terrain/w130n30/w123n3''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|example1 = print(tilePath()); # print path&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== values()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = values(hash);&lt;br /&gt;
|source = {{fgdata file|Nasal/globals.nas|t=Source}}&lt;br /&gt;
|text = Returns a vector containing the values of the given hash.&lt;br /&gt;
|param1 = hash&lt;br /&gt;
|param1text = Mandatory hash to get the values of.&lt;br /&gt;
|example1 = var hash = {&lt;br /&gt;
    &amp;quot;a&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;c&amp;quot;: 3&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
foreach(var val; values(hash)){&lt;br /&gt;
    print(val);&lt;br /&gt;
}&lt;br /&gt;
|example2text = The below example does exactly the same thing as the above example, but does not use &amp;lt;code&amp;gt;values()&amp;lt;/code&amp;gt;:&lt;br /&gt;
|example2 = var hash = {&lt;br /&gt;
    &amp;quot;a&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;b&amp;quot;: 2,&lt;br /&gt;
    &amp;quot;c&amp;quot;: 3&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
foreach(var key; keys(hash)){&lt;br /&gt;
    print(hash[key]);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Extension functions new in FG 2020.1 ==&lt;br /&gt;
The following functions have been added to the nasal core library and will be released with FlightGear version 2020.1. &lt;br /&gt;
Before the release they are available in the development branch &amp;quot;next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===isfunc()===&lt;br /&gt;
Returns 1 if type or argument is a function, otherwise 0.&lt;br /&gt;
&lt;br /&gt;
===isghost()===&lt;br /&gt;
Returns 1 if type or argument is a ghost, otherwise 0.&lt;br /&gt;
&lt;br /&gt;
=== ishash()===&lt;br /&gt;
Returns 1 if type or argument is a hash, otherwise 0.&lt;br /&gt;
&lt;br /&gt;
===isint()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = isint(x);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|t=Source}}&lt;br /&gt;
|text = Returns 1 if argument has a numeric value and x == floor(x), e.g. integer.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===isnum()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = isnum(x);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|t=Source}}&lt;br /&gt;
|text = Returns 1 if typeof(x) is &amp;quot;scalar&amp;quot; and x has a numeric value otherwise 0. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===isscalar()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = isscalar(x);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|t=Source}}&lt;br /&gt;
|text = Returns 1 if type or argument is a scalar (string or numeric), otherwise (vector, hash, func, ...) it returns 0. This is useful to check if a variable can be converted to string e.g. when useing the string concat operator &amp;quot;~&amp;quot;. &lt;br /&gt;
|example1 = var a = &amp;quot;foo&amp;quot;; &lt;br /&gt;
var b=42;&lt;br /&gt;
if (isscalar(a) and isscalar(b)) print(a~b);&lt;br /&gt;
if (isstr(a)) print(&amp;quot;a is a string&amp;quot;);&lt;br /&gt;
if (isint(b)) print(&amp;quot;b is an integer&amp;quot;);&lt;br /&gt;
# if (isscalar(a))... is equivalent to if (typeof(a) == &amp;quot;scalar&amp;quot;)...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===isstr()===&lt;br /&gt;
Returns 1 if type or argument is a string, otherwise 0. &lt;br /&gt;
&lt;br /&gt;
===isvec()===&lt;br /&gt;
Returns 1 if type or argument is a vector, otherwise 0.&lt;br /&gt;
&lt;br /&gt;
===vecindex()===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = vecindex(vector, value);&lt;br /&gt;
|source = {{simgear file|simgear/nasal/lib.c|t=Source}}&lt;br /&gt;
|text = Returns the index of value or nil, if value is not found in vector.&lt;br /&gt;
|example1=&lt;br /&gt;
var myvector = [&amp;quot;apple&amp;quot;, &amp;quot;bananna&amp;quot;, &amp;quot;coconut&amp;quot;];&lt;br /&gt;
# to check if a vector contains a certain value compare vecindex to nil&lt;br /&gt;
if (vecindex(myvector, &amp;quot;apple&amp;quot;) != nil) {&lt;br /&gt;
    print(&amp;quot;found apple&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
# WARNING: this will not work as desired because index is 0&lt;br /&gt;
if (vecindex(myvector, &amp;quot;apple&amp;quot;)) {&lt;br /&gt;
    print(&amp;quot;found apple&amp;quot;);&lt;br /&gt;
&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
Various global constants (technically variables) are provided for use in converting between different units. They are all found in {{fgdata file|Nasal/globals.nas|text=$FG_ROOT/Nasal/globals.nas}}.&lt;br /&gt;
&lt;br /&gt;
===D2R===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var radians = degrees * D2R;&lt;br /&gt;
|text = Converts an angle from degrees to radians when multiplied by the angle in degrees. Equal to &amp;lt;code&amp;gt;π / 180&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
===FPS2KT===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var knots = feet_per_second * FPS2KT;&lt;br /&gt;
|text = Converts a velocity from feet per second to knots when multiplied by the velocity in feet per second. Approximately equal to 0.5925.&lt;br /&gt;
}}&lt;br /&gt;
===FT2M===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var metres = feet * FT2M;&lt;br /&gt;
|text = Converts a length from feet to metres when multiplied by the length in feet. Equal to 0.3048.&lt;br /&gt;
}}&lt;br /&gt;
===GAL2L ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var litres = gallons * GAL2L;&lt;br /&gt;
|text = Converts a volume from US liquid gallons to litres when multiplied by the volume in gallons. Approximately equal to 3.7854.&lt;br /&gt;
}}&lt;br /&gt;
===IN2M===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var metres = inches * IN2M;&lt;br /&gt;
|text = Converts a length from inches to metres when multiplied by the length in inches. Equal to 0.0254.&lt;br /&gt;
}}&lt;br /&gt;
===KG2LB===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var pounds = kilograms * KG2LB;&lt;br /&gt;
|text = Converts a mass from kilograms to pounds when multiplied by the mass in kilograms. Approximately equal to 2.2046.&lt;br /&gt;
}}&lt;br /&gt;
===KT2FPS===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var feet_per_second = knots * KT2FPS;&lt;br /&gt;
|text = Converts a velocity from knots to feet per second when multiplied by the velocity in knots. Approximately equal to 1.6878.&lt;br /&gt;
}}&lt;br /&gt;
===KT2MPS===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var metres_per_second = knots * KT2MPS;&lt;br /&gt;
|text = Converts a velocity from knots to metres per second when multiplied by the velocity in knots. Approximately equal to 0.5144.&lt;br /&gt;
}}&lt;br /&gt;
===L2GAL===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var gallons = litres * L2GAL;&lt;br /&gt;
|text = Converts a volume from litres to US liquid gallons when multiplied by the volume in litres. Approximately equal to 0.2642.&lt;br /&gt;
}}&lt;br /&gt;
===LB2KG===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var kilograms = pounds * LB2KG;&lt;br /&gt;
|text = Converts a mass from pounds to kilograms when multiplied by the mass in pounds. Approximately equal to 0.4536.&lt;br /&gt;
}}&lt;br /&gt;
===M2FT ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var feet = metres * M2FT;&lt;br /&gt;
|text = Converts a length from metres to feet when multiplied by the length in metres. Approximately equal to 3.2808.&lt;br /&gt;
}}&lt;br /&gt;
===M2IN===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var inches = metres * M2IN;&lt;br /&gt;
|text = Converts a length from metres to inches when multiplied by the length in metres. Approximately equal to 39.3701.&lt;br /&gt;
}}&lt;br /&gt;
===M2NM ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var nautical_miles = metres * M2NM;&lt;br /&gt;
|text = Converts a length from metres to nautical miles when multiplied by the length in metres. Approximately equal to 0.00054.&lt;br /&gt;
}}&lt;br /&gt;
===MPS2KT ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var knots = metres_per_second * MPS2KT;&lt;br /&gt;
|text = Converts a velocity from metres per second to knots when multiplied by the velocity in metres per second. Approximately equal to 1.9438.&lt;br /&gt;
}}&lt;br /&gt;
===NM2M ===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var metres = nautical_miles * NM2M;&lt;br /&gt;
|text = Converts a length from nautical miles to metres when multiplied by the length in nautical miles. Equal to 1,852.&lt;br /&gt;
}}&lt;br /&gt;
===R2D===&lt;br /&gt;
{{Nasal doc&lt;br /&gt;
|syntax = var degrees = radians * R2D;&lt;br /&gt;
|text = Converts an angle from radians to degrees when multiplied by the angle in radians. Equal to &amp;lt;code&amp;gt;180 / π&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Nasal namespaces}}&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Nasal_library/string&amp;diff=139645</id>
		<title>Nasal library/string</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Nasal_library/string&amp;diff=139645"/>
		<updated>2024-04-09T08:14:46Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* string.join(sep,list) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Nasal Navigation}}&lt;br /&gt;
== String Handling ==&lt;br /&gt;
This page contains description of functions available in &amp;quot;$FG_ROOT\data\Nasal\strings.nas&amp;quot;.&lt;br /&gt;
For string related functions in Nasal also see [[Nasal_library|Nasal library]] page.&lt;br /&gt;
UTF8 specific functions are from Nasal core library.&lt;br /&gt;
&lt;br /&gt;
== One Character Functions ==&lt;br /&gt;
=== string.isalnum() === &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isalnum();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isalpha() === &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isalpha();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isascii() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isascii();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isblank() === &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isblank();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.iscntrl() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.iscntrl();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isdigit() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isdigit();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isgraph() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isgraph();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.islower() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.islower();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isprint() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isprint();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.ispunct() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.ispunct();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isspace() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isspace();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isupper() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isupper();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isxdigit() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isxdigit();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.isxspace() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.isxspace();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.toupper() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.toupper();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.tolower() ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.tolower();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== String Functions ==&lt;br /&gt;
=== string.icmp(a,b) ===&lt;br /&gt;
Case insensitive string compare function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.icmp(a,b);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.imatch(a,b) ===&lt;br /&gt;
Case insensitive match function.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.imatch(a,b);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
*string.imatch(&amp;quot;alpha&amp;quot;,&amp;quot;beta&amp;quot;) -&amp;gt; 0&lt;br /&gt;
*string.imatch(&amp;quot;alpha&amp;quot;,&amp;quot;alpha&amp;quot;) -&amp;gt; 1&lt;br /&gt;
*string.imatch(&amp;quot;&amp;quot;,&amp;quot;alpha&amp;quot;) -&amp;gt; 0&lt;br /&gt;
*string.imatch(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;) -&amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
=== string.join(sep,list) ===&lt;br /&gt;
Join all elements of a list inserting a separator between every two of them. See [[Nasal_library#split()|split()]].&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.join(sep,list);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.lc(str) ===&lt;br /&gt;
Return string converted to lower case letters.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.lc(str);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.match(str, patt) ===&lt;br /&gt;
Check if string &amp;lt;str&amp;gt; matches shell style pattern &amp;lt;patt&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
# Rules:&lt;br /&gt;
# ?   stands for any single character&lt;br /&gt;
# *   stands for any number (including zero) of arbitrary characters&lt;br /&gt;
# \   escapes the next character and makes it stand for itself; that is:&lt;br /&gt;
#     \? stands for a question mark (not the &amp;quot;any single character&amp;quot; placeholder)&lt;br /&gt;
# []  stands for a group of characters:&lt;br /&gt;
#     [abc]      stands for letters a, b or c&lt;br /&gt;
#     [^abc]     stands for any character but a, b, and c  (^ as first character -&amp;gt; inversion)&lt;br /&gt;
#     [1-4]      stands for digits 1 to 4 (1, 2, 3, 4)&lt;br /&gt;
#     [1-4-]     stands for digits 1 to 4, and the minus&lt;br /&gt;
#     [-1-4]     same as above&lt;br /&gt;
#     [1-3-6]    stands for digits 1 to 3, minus, and 6&lt;br /&gt;
#     [1-3-6-9]  stands for digits 1 to 3, minus, and 6 to 9&lt;br /&gt;
#     [][]       stands for the closing and the opening bracket (']' must be first!)&lt;br /&gt;
#     [^^]       stands for all characters but the caret symbol&lt;br /&gt;
#     [\/]       stands for a backslash or a slash  (the backslash isn't an&lt;br /&gt;
#                escape character in a [] character group)&lt;br /&gt;
#&lt;br /&gt;
#     Note that a minus can't be a range delimiter, as in [a--e],&lt;br /&gt;
#     which would be interpreted as any of a, e, or minus.&lt;br /&gt;
#&lt;br /&gt;
# Example:&lt;br /&gt;
&lt;br /&gt;
string.match(name, &amp;quot;*[0-9].xml&amp;quot;); ... true if 'name' ends with digit followed by &amp;quot;.xml&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.normpath(path) ===&lt;br /&gt;
Removes superfluous slashes, empty and &amp;quot;.&amp;quot; elements,&lt;br /&gt;
expands all &amp;quot;..&amp;quot; elements keeping relative paths,&lt;br /&gt;
and turns all backslashes into slashes.&lt;br /&gt;
The result will start with a slash if it started with a slash or backslash, it will end without slash.                                                 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.normpath(path);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
See also [[Nasal_library#resolvepath|resolvepath()]] function, which can be used to test if a file exists.&lt;br /&gt;
&lt;br /&gt;
=== string.replace(str,old,new) ===&lt;br /&gt;
Replace all occurrences of 'old' by 'new'.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.replace(str,old,new);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.scanf(test,format,result) ===&lt;br /&gt;
Simple scanf function. Takes an input string, a pattern, and a vector. &lt;br /&gt;
It returns 0 if the format didn't match, and appends all found elements to the given vector. &lt;br /&gt;
&lt;br /&gt;
Return values:                                                                                &lt;br /&gt;
 -1 string matched format ending with % (i.e. more chars than format cared about)&lt;br /&gt;
  0 string didn't match format                                                   &lt;br /&gt;
  1 string matched, but would still match if the right chars were added          &lt;br /&gt;
  2 string matched, and would not if any character would be added                &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
var r = string.scanf(&amp;quot;comm3freq123.456&amp;quot;, &amp;quot;comm%ufreq%f&amp;quot;, var result = []);    &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The result vector will be set to [3, 123.456].&lt;br /&gt;
&lt;br /&gt;
=== string.trim(str,lr[,func]) === &lt;br /&gt;
Trim spaces at the left (lr &amp;lt; 0), at the right (lr &amp;gt; 0), or both (lr = 0) is default.&lt;br /&gt;
An optional function argument defines which characters should be trimmed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.trim(a);                                    # trim spaces             &lt;br /&gt;
string.trim(a, 1, string.isdigit);                 # trim digits at the right&lt;br /&gt;
string.trim(a, 0, func(c) c == `\\` or c == `/`);  # trim slashes/backslashes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== string.uc(str) ===&lt;br /&gt;
Return string converted to upper case letters.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.uc(str);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== string.compileTemplate(template,type=nil) ===&lt;br /&gt;
Get a function out of a string template for fast insertion of template parameters. &lt;br /&gt;
This allows to use the same templates as with most available tile mapping engines (eg. Leaflet, Polymaps). &lt;br /&gt;
Return a callable function object on success, and nil if parsing the templated fails.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
string.compileTemplate(template);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Example (Build MapQuest tile url):                                &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nasal&amp;quot;&amp;gt;&lt;br /&gt;
 var makeUrl = string.compileTemplate(                          &lt;br /&gt;
   &amp;quot;http://otile1.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpg&amp;quot;    &lt;br /&gt;
 );                                                             &lt;br /&gt;
 print( makeUrl({x: 5, y: 4, z: 3}) );                          &lt;br /&gt;
&lt;br /&gt;
Output:   http://otile1.mqcdn.com/tiles/1.0.0/map/3/5/4.jpg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UTF8 String Functions (Core) ==&lt;br /&gt;
=== utf8.chstr(unicode) ===&lt;br /&gt;
Returns a string containing the UTF8 representation of the specified unicode character value. &lt;br /&gt;
=== utf8.strc(string, index) ===&lt;br /&gt;
Returns the unicode character at the specified index within the UTF8 string. Dies on encoding error or overrun. &lt;br /&gt;
=== utf8.substr(string, start, len=nil) ===&lt;br /&gt;
As for regular substr(), but the indices are of UTF8 characters intead of bytes. Dies on encoding error or overflow. &lt;br /&gt;
=== utf8.size(string) ===&lt;br /&gt;
As for regular size() when called on a string, but returns the number of UTF8 unicode characters instead of bytes. Dies on encoding error. &lt;br /&gt;
=== utf8.validate(string, replace=`?`) ===&lt;br /&gt;
Checks the string for UTF8 validity. At every byte position where an encoding error is found, it replaces that byte with the specified replacement character (default is `?`). Note that the second argument is a number, not a string.&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Bendix_King_KN62A_DME&amp;diff=139643</id>
		<title>Bendix King KN62A DME</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Bendix_King_KN62A_DME&amp;diff=139643"/>
		<updated>2024-04-08T16:30:18Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Kn62a.png|thumb|270px|Bendix/King KN-62A DME]]&lt;br /&gt;
The Bendix/King KN62A Distance Measurement Equipment ([[DME]]) allows you to get measurements to a tuned VOR station and displays ''distance'', ''speed'' and ''estimated time'' to the station.&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Power On/Off ===&lt;br /&gt;
The unit has two slider type switches and a frequency selection knob.&lt;br /&gt;
After switching the unit on using the power switch (the lower one), the mode slider switch (the upper one) determines operation.&lt;br /&gt;
&lt;br /&gt;
The unit is usually wired to an electrical avionics circuit of your plane.&lt;br /&gt;
&lt;br /&gt;
=== RMT mode (NAV1 linked) ===&lt;br /&gt;
The DME features a primary mode (''RMT'') which is automatically slaved to NAV1. It uses a VOR-DMEs assigned frequency automatically from the tuned NAV1 frequency.&lt;br /&gt;
&lt;br /&gt;
=== FREQ mode ===&lt;br /&gt;
Changing the mode to `FREQ` allows you to adjust the secondary frequency using the inner and outer frequency selection knobs (while in ''FREQ'' mode, the distance to the station is displayed, so you can see if you have reception.).  &lt;br /&gt;
&lt;br /&gt;
=== GS/T mode (secondary frequency display) ===&lt;br /&gt;
Finally, the ''GS/T'' mode locks the secondary frequency selection and displays ''distance'', ''speed'' and ''estimated time'' to the secondary station.&lt;br /&gt;
&lt;br /&gt;
This way, you can scan for stations and get information about a station without the need to retune NAV1.&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft instruments]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Bendix_King_KN62A_DME&amp;diff=139642</id>
		<title>Bendix King KN62A DME</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Bendix_King_KN62A_DME&amp;diff=139642"/>
		<updated>2024-04-08T16:30:04Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: Created page with &amp;quot;Bendix/King KN-62A DME The Bendix/King KN62A Distance Measurement Equipment (DME) allows you to get measurements to a tuned VOR station and displays ''distance'', ''speed'' and ''estimated time'' to the station.  == Operation ==  === Power On/Off === The unit has two slider type switches and a frequency selection knob. After switching the unit on using the power switch (the lower one), the mode slider switch (the upper one) determines opera...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Kn62a.png|thumb|270px|Bendix/King KN-62A DME]]&lt;br /&gt;
The Bendix/King KN62A Distance Measurement Equipment (DME) allows you to get measurements to a tuned VOR station and displays ''distance'', ''speed'' and ''estimated time'' to the station.&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Power On/Off ===&lt;br /&gt;
The unit has two slider type switches and a frequency selection knob.&lt;br /&gt;
After switching the unit on using the power switch (the lower one), the mode slider switch (the upper one) determines operation.&lt;br /&gt;
&lt;br /&gt;
The unit is usually wired to an electrical avionics circuit of your plane.&lt;br /&gt;
&lt;br /&gt;
=== RMT mode (NAV1 linked) ===&lt;br /&gt;
The DME features a primary mode (''RMT'') which is automatically slaved to NAV1. It uses a VOR-DMEs assigned frequency automatically from the tuned NAV1 frequency.&lt;br /&gt;
&lt;br /&gt;
=== FREQ mode ===&lt;br /&gt;
Changing the mode to `FREQ` allows you to adjust the secondary frequency using the inner and outer frequency selection knobs (while in ''FREQ'' mode, the distance to the station is displayed, so you can see if you have reception.).  &lt;br /&gt;
&lt;br /&gt;
=== GS/T mode (secondary frequency display) ===&lt;br /&gt;
Finally, the ''GS/T'' mode locks the secondary frequency selection and displays ''distance'', ''speed'' and ''estimated time'' to the secondary station.&lt;br /&gt;
&lt;br /&gt;
This way, you can scan for stations and get information about a station without the need to retune NAV1.&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft instruments]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/Cessna_182S&amp;diff=139641</id>
		<title>De/Cessna 182S</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/Cessna_182S&amp;diff=139641"/>
		<updated>2024-04-08T16:26:40Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{#titleparts:{{PAGENAME}}||2}}/info}}&lt;br /&gt;
&lt;br /&gt;
Die '''Cessna 182S Skylane''' ist ein amerikanischer, viersitziger, einmotoriger Schulterdecker mit festem Dreibeinfahrwerk. [[Cessna]] baute es zwichen 1996 und 2001.&lt;br /&gt;
Sie benutzt ein Textron Lycoming IO-540 AB1A5 mit Direkteinspritzung, das 230PS bei 2400 RPM Leistung erzeugt.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Die Cessna 182S ist eines der hochqualitativen Modelle in FlightGear.&lt;br /&gt;
&lt;br /&gt;
Das Cockpit hat ein sehr detailliertes 3D-modell. Alle Schalter und Leuchten sind funktional. Das FDM ist sehr realistisch und basiert auf echten aerodynamischen Koeffizienten sowie dem Pilots Operating Handbook (POH). Triebwerksleistung, EGT und Treibstoffeffizienz sind anhand der Performancedaten des POH eingestellt. Gewicht und Verteilung verhalten sich ebenfalls wie im POH beschrieben. Fliege nach dem Handbuch - ein link dazu is am Ende dieses Artikels verlinkt.&lt;br /&gt;
&lt;br /&gt;
[[File:c182-panel-detail.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Das Flugzeugmodell bietet verschiedene Lackierungen an, darunter einige realistische von echten Vorbildern, aber auch generische, die eine eigene Typnummer unterstützen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im cockpit findet sich eine realistische Variante des [[De/Autopilot_Bendix/King_KAP140|Bendix KAP140 Autopilot]]. Das Cockpit kann mithilfe verschiedener Leuchtmittel beleuchtet werden (die beiden Cockpitknöpfe zum Drehen sowie die Überkopfleuchten; für den Notfall gibt es im Flugzeugmenü auch eine Taschenlampe).&lt;br /&gt;
&lt;br /&gt;
Mit aktiviertem ALS gibt es Regen- und Frosteffekte auf den Scheiben, Schatten im Cockpit sowie Lande- und Taxilichter.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Bodenequipment wie eine externe Stromversorgung (-&amp;gt; Flugzeugmenü), Tankwagen, Leitern und ein Vorheizgerät.&lt;br /&gt;
Dazu kommt noch realistisches Preflight wie Sicherungsspangurte und Radkeile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:c182-objects.jpg|600px|center|Cessna 182S with static elements]]&lt;br /&gt;
&lt;br /&gt;
==Feature-Liste:==&lt;br /&gt;
Details und Nutzungshinweise sind auch in der [https://github.com/HHS81/c182s/blob/master/Documentation.md documentation] einzusehen.&lt;br /&gt;
* Akkurates Flugmodell, basierend auf aerodynamischen Koeffizienten und dem POH&lt;br /&gt;
* Akkurate Treibstoffverbrauchszalen, Triebwerksleistung, Geschwindikeit und Steigrate in nahezu allen Luftdruck- und temperaturumgebungen (&amp;lt;5% Unterschied zum POH)&lt;br /&gt;
* realistische Stalleigenschaften&lt;br /&gt;
* Berechnung des echten KIAS basierend auf KCAS, basierend auf dem POH&lt;br /&gt;
* Akkurate Gewichts- und -verteilungseigenschaften&lt;br /&gt;
&lt;br /&gt;
* Verschiedene Startkonfigurationen (z.b. &amp;quot;Start im Flug&amp;quot;)&lt;br /&gt;
* Autostart für Einsteiger&lt;br /&gt;
&lt;br /&gt;
* Vollständige Simulation des Treibstoffsystems: Treibstoffluss durch Gravitation, Benzinpumpen, korrekte Priming-Prozedur für Kaltstart (siehe POH), Treibstoffkontamination&lt;br /&gt;
* Realistische Bordelektronik (Batterieleistung abhängig von Temperatur; funktionierende Sicherungen)&lt;br /&gt;
* Vollständige Simulation des Ölmanagements (Temperatur, Füllstand, Öltyp...)&lt;br /&gt;
* Simulatin der Kabinentemperatur und Frost/angelaufene Scheiben&lt;br /&gt;
* Simulation der Flügel- und Properllervereisung, Vereisung der Luftfilter, Statikportöffnungen und des Pitotrohrs&lt;br /&gt;
* Detaillierte Schadens- und Fehlersimulation&lt;br /&gt;
&lt;br /&gt;
* Hochqualitatives 3D-modell und texturen&lt;br /&gt;
* Realistische Reflektionen der Außenhaut&lt;br /&gt;
* Auswählbare Chromnabe für den Propeller und die Radabdeckungen&lt;br /&gt;
* Sehr detailliertes 3D-Interieur&lt;br /&gt;
* Funktionale und bewegliche Sonnenblenden&lt;br /&gt;
* Alle Cockpitknöpfe funktionieren&lt;br /&gt;
* Vollständig funktionierendes Audiopanel&lt;br /&gt;
* Vollständiger und realistischer [[De/Autopilot_Bendix/King_KAP140|Bendix KAP140 Autopilot]]&lt;br /&gt;
* Vollständig funktionierende [[De/Davtron M803|Davtron M803]] Digitaluhr&lt;br /&gt;
* Vollständig funktionierender Bendix King avionics stack (zwei [[De/Kx165|KX-165 VHF COM/NAV radios]], [[De/Bendix_King_KN62A_DME|KN-62A DME]], [[Bendix_King_KT_76A|KT-67C Transponder]], [[De/Bendix_King_KR_87_ADF|KR-87 ADF]])&lt;br /&gt;
* Realistische Innenbeleuchtung und Schatteneffekte mit ALS Renderer&lt;br /&gt;
* Angelaufene scheiben und Frostsimulation mit ALS Renderer&lt;br /&gt;
* Optionales und voll funktionsfähiges Winterausrüstungs-Kit&lt;br /&gt;
* Außenequipment wie Leitern, Pylonen, Sicherungselemente, Externe Stromversorgung, Vorheizgerät, ....&lt;br /&gt;
&lt;br /&gt;
* Fast vollständige Vorflugkontrolle&lt;br /&gt;
* Flugzeug merkt sich optional den letzten Zustand beim Verlassen von FlightGear&lt;br /&gt;
* Viele Lackierungen (mehrere mit multiplayerfähigen eigener Kennung)&lt;br /&gt;
&lt;br /&gt;
=== Flugzeugschlepp für Segelflieger ===&lt;br /&gt;
Die C182S und C182T sind fähig, [[Howto: Do aerotow over the net|Segelflieger im Mehrspielermodus zu schleppen]]. Hierfür muss der Segelflugpilot {{key press|Ctrl|o}} drücken, wenn er hinter der Cessna ist.&lt;br /&gt;
Der Cessnapilot kann den Haken jederzeit mit {{key press|Shift|O}} lösen.&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Copilot (Dual control) ===&lt;br /&gt;
Das Flugzeug unterstützt einen menschlichen Copiloten, der im Multiplayer mitfliegen kann [[Dual control|(&amp;quot;Dual control&amp;quot;)]].&lt;br /&gt;
Der Copilot muss die copilotvariante laden und dann das Pilotenflugzeug im &amp;quot;Multiplayer&amp;quot;-Menü auswählen.&lt;br /&gt;
Der Copilot muss entsprechend auf die gleiche Weise den Piloten auswählen.&lt;br /&gt;
&lt;br /&gt;
Der Copilot ist im Moment nur Zuschauer und kann selbst nicht ins Flugzeug eingreifen.&lt;br /&gt;
&lt;br /&gt;
=== Fallschirmspringer ===&lt;br /&gt;
Über das Flugzeugmenü kann die Cessna umgebaut werden (entfernen der rechten Tür und der Sitze), um Fallschirmspringer zu transportieren.&lt;br /&gt;
Werden die Passagiere angekickt, klettern sie hinaus und springen ab.&lt;br /&gt;
Die Fallschirmspringer sind sogar im Mehrspielermodus sichtbar, wenn die anderen Piloten das C182S-Modell installiert haben!&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Im Moment wird nur die Gewichtsverlagerung und der Windwiderstand simuliert, nicht das 3D-Modell beim Hinasuklettern (siehe [https://github.com/HHS81/c182s/issues/515 FR issue ticket #515]).&lt;br /&gt;
&lt;br /&gt;
=== Erweiterte Fehler / Überraschungsmodus ===&lt;br /&gt;
Das Flugzeug bietet eine sehr detaillierte Fehlersimulation an. Optional kannst du dich auch zufällig überraschen lassen (sogar, ohne dich über einen aufgetretenen Fehler zu informieren). Das Fehler-Dialogfenster kannst du über das Flugzeugmenü erreichen. Du kannst die zufälligen Fehler auch für den Simulatorstart konfigurieren, indem du Konfigurationsoptionen hinterlegst. Details sind in der [https://github.com/HHS81/c182s/blob/master/Documentation.md#extended-failure-simulation Dokumentation] einzusehen.&lt;br /&gt;
&lt;br /&gt;
== Flugzeugbedienung (für Einsteiger) ==&lt;br /&gt;
Du kannst jederzeit realistischere Simulationsoptionen über das Flugzeugmenü zuschalten; beispielsweise Treibstoffverunreinigung, Ölmanagement und realistische Motorsimulation inkl. Startverhalten.&lt;br /&gt;
&lt;br /&gt;
Generell bietet die Checkliste eine vollständige Kurzanleitung für die Grundfunktionen des Flugzeug. Die Checkliste ist im Menü &amp;quot;Hilfe&amp;quot; von FlightGear verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Vorflugkontrolle ===&lt;br /&gt;
[[File:C182-ready-for-take-off.jpg|270px||thumb|Cessna 182S bereit zum Start]]&lt;br /&gt;
Für die Vorflugkontrolle wird empfohlen, den &amp;quot;walker&amp;quot; zu aktivieren und damit um das Flugzeug zu laufen.&lt;br /&gt;
&lt;br /&gt;
Es wird empfohlen, eine Außenansicht oder den Walker hierfür zu verwenden und im Gegenuhrzeigersinn um das Flugzeug zu gehen.&lt;br /&gt;
* Cockpit: Entfernen der Sicherung am Steuerhorn&lt;br /&gt;
* Überprüfe die Treibstoffmenge durch Klicken auf die Tankdeckel oben auf jeder Fläche&lt;br /&gt;
* Linke Tragfläche: Entferne den Spanngurt&lt;br /&gt;
* Linke Tragfläche: Entferne die Abdeckung des Staurohrs&lt;br /&gt;
* Linke Tragfläche: Überprüfe den Treibstoff auf Verschmutzung durch Klicken unterhalb der Tragfläche und Entnahme einer Treibstoffprobe. Ist diese hellblau, so ist der Treibstoff nicht verschmutzt und die Probe kann in den Tank zurückgegeben werden. Ist sie (teilweise) durchsichtig, enthält der Tribstoff Wasser, und die Probe muss entsorgt werden. Der Vorgang ist so lange zu wiederholen, bis die Probe komplett hellblau ist&lt;br /&gt;
* Linke Seite: Entferne den Radkeil am Hauptrad&lt;br /&gt;
* Heck: Entferne den Spanngurt&lt;br /&gt;
* Rechte Tragfläche: Entferne die Spanngurte&lt;br /&gt;
* Rechte Tragfläche: Überprüfe den Treibstoff auf Verschmutzung&lt;br /&gt;
* Rechte Seite: Entferne den Radkeil am Hauptrad&lt;br /&gt;
* Rechte Schnauze: Überprüfe den Treibstoff auf Verschmutzung am Treibstoffwähler (unter dem Flugzeug) und Treibstoffilter (rechte Nase)&lt;br /&gt;
* Schnauze: Überprüfe den Ölstand durch Klicken auf den Ölstutzen in der Nase. Niedriger Ölstand ist unterhalb 6.0 Quarts.&lt;br /&gt;
* Schnauze: Entferne den Radkeil am Bugrad&lt;br /&gt;
&lt;br /&gt;
=== Motor Kaltstart (manual and complex startup) ===&lt;br /&gt;
* Gemisch: Idle-Cutoff (roter Hebel voll raus)&lt;br /&gt;
* Propeller: High RPM (blauer Hebel voll drin)&lt;br /&gt;
* Gashebel: 1/4 Zoll offen (schwarzer Hebel bei ~5%-8% Einstellung in der Simulation)&lt;br /&gt;
* Parkbremse: Angezogen ({{Key press|Shift|B}})&lt;br /&gt;
* Hauptschalter: An (beide roten Kippschalter)&lt;br /&gt;
* Treibstoff-Hilfspumpe: An&lt;br /&gt;
* Gemisch auf voll schieben, ca. 3 Sekunden halten, bis stetiger Treibstoffluss erreicht wird&lt;br /&gt;
* Dann Gemisch: Idle-Cutoff&lt;br /&gt;
* Treibstoff-Hilfspumpe: Aus&lt;br /&gt;
* Magnete: Beide (Drücke {{Key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}} 3x)&lt;br /&gt;
* Zündung: Start (halte {{Key press|S}} bis der Motor läuft)&lt;br /&gt;
&lt;br /&gt;
Falls der Motor abgesoffen ist (zu viel Priming mit der Treibstoffpumpe):&lt;br /&gt;
* Gemisch: Idle-Cutoff&lt;br /&gt;
* Gashebel: 1/2 bis voll eingeschoben&lt;br /&gt;
* Zündung: Start (halte {{Key press|S}} bis der Motor läuft). Sobald der motor anspringt, Gemisch voll angereichert (roter Hebel rein) und Gashebel auf Leerlauf (fast ganz heraus).&lt;br /&gt;
&lt;br /&gt;
War der Motor bereits vor kurzem auf Betriebstemperatur, reicht es in der Regel, das Gemisch auf Rich (&amp;quot;Fett&amp;quot;) zu stellen (roter Hebel rein), und den Starter zu betätigen.&lt;br /&gt;
&lt;br /&gt;
Alternativ zum manuellen (kalt-)Start gibt es eine Autostartfunktion im Flugzeugmenü.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
* Keine Landeklappen, oder 10 Grad&lt;br /&gt;
* Kühlklappen offen ({{Key press|Shift|F}} mehrfach drücken)&lt;br /&gt;
* Vollgas&lt;br /&gt;
* Rotieren bei ca. 50-60 KIAS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steigflug ===&lt;br /&gt;
* Keine Landeklappen&lt;br /&gt;
* Kühlklappen offen&lt;br /&gt;
* Vollgas&lt;br /&gt;
* 80 KIAS&lt;br /&gt;
* Sobald sichere Flughöhe erreicht/Hindernisse überflogen: Gas zurücknehmen, um Motoranzeigen in die grünen Bereiche zu bringen&lt;br /&gt;
** Treibstoffluss: max 15Gph&lt;br /&gt;
** Gashebel: max 23 in.Hg&lt;br /&gt;
&lt;br /&gt;
=== Reiseflug ===&lt;br /&gt;
[[File:c182-default.jpg|270px||thumb|Cessna 182S in der Luft]]&lt;br /&gt;
* Propeller: 2000-2400 RPM&lt;br /&gt;
* Gashebel: 18-23 mp&lt;br /&gt;
* Mixture &amp;quot;Fette Seite&amp;quot; über der EGT-Spitze als empfohlene &amp;quot;magere Einstellung&amp;quot; für den Reiseflug; oder 125°F EGT fetter für besten Schub&lt;br /&gt;
* Geschwindigkeit zwischen 120-140 Knoten IAS (abhängig von der Leistungseinstellung&lt;br /&gt;
* Kühlklappen geschlossen ({{Key press|f}} nach Bedarf -&amp;gt; CHT Anzeige beachten)&lt;br /&gt;
&lt;br /&gt;
=== Landung ===&lt;br /&gt;
* Landeklappen 20 grad oder Voll&lt;br /&gt;
* 60-70 KIAS&lt;br /&gt;
&lt;br /&gt;
=== Flugzeuggeschwindigkeiten ===&lt;br /&gt;
: ''Siehe auch [[De/Fluggeschwindigkeit#V-Speeds]]''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Geschwindigkeit !! IAS&lt;br /&gt;
|-&lt;br /&gt;
| Überziehgeschwindigkeit, Landekonfiguration, V&amp;lt;sub&amp;gt;S&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 36 kt&lt;br /&gt;
|-&lt;br /&gt;
| Überziehgeschwindigkeit, Reiseflugkonfiguration, V&amp;lt;sub&amp;gt;S&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 43 kt&lt;br /&gt;
|-&lt;br /&gt;
| Rotationsgeschwindegkeit, V&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; || 55 kt&lt;br /&gt;
|-&lt;br /&gt;
| Bester Steigwinkel, V&amp;lt;sub&amp;gt;X&amp;lt;/sub&amp;gt; || 63 kt&lt;br /&gt;
|-&lt;br /&gt;
| Höchste Steigrate, V&amp;lt;sub&amp;gt;Y&amp;lt;/sub&amp;gt; || 80 kt&lt;br /&gt;
|-&lt;br /&gt;
| Höchstgeschwindegkeit bei ausgefahrenen Landeklappen, V&amp;lt;sub&amp;gt;FE&amp;lt;/sub&amp;gt; || 100 kt&lt;br /&gt;
|-&lt;br /&gt;
| Manövergeschwindigkeit, V&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; || 110 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximale Reisegeschwindigkeit, V&amp;lt;sub&amp;gt;NO&amp;lt;/sub&amp;gt; || 140 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximal zulässige Höchstgeschwindigkeit, V&amp;lt;sub&amp;gt;NE&amp;lt;/sub&amp;gt; || 175 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximaler Seitenwind bei Landung|| 15 kt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Reiseflug, 80% Leistung,  6,000 ft || 140 kt&lt;br /&gt;
|-&lt;br /&gt;
|Reiseflug, 65% Leistung,  8,000 ft || 130 kt&lt;br /&gt;
|-&lt;br /&gt;
|Reiseflug, 55% Leistung, 10,000 ft || 121 kt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Entfernung,  75% Leistung,  6,000 ft || 820 nm&lt;br /&gt;
|-&lt;br /&gt;
|Entfernung,  65% Leistung,  8,000 ft || 910 nm&lt;br /&gt;
|-&lt;br /&gt;
|Entfernung,  55% Leistung, 10,000 ft || 968 nm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Beste Steigrate&amp;lt;ref&amp;gt;POH 5-19; bei 3100lbs, Seehöhe, 2400 RPM, Vollgas, Gemisch gesetzt nach &amp;quot;Maximum power Fuel Flow&amp;quot;-Plakette, Kühlklappen Offen, Standardtemperatur&amp;lt;/ref&amp;gt; || 924fpm&lt;br /&gt;
|-&lt;br /&gt;
|Dienstgipfelhöhe || 18,100ft&lt;br /&gt;
|-&lt;br /&gt;
|Startrollweg: 795ft  über 50ft Hindernis || 1,514ft&lt;br /&gt;
|-&lt;br /&gt;
|Landerollweg: 590ft  über 50ft Hindernis || 1,390ft&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:c182-cockpit-at-night.jpg|600px|center|Cessna 182S Konsolenbeleuchtung]]&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
'''''Ich frage mich, warum die 182s einfacher zu fliegen sein sollte, als die 172p?'''''&lt;br /&gt;
&lt;br /&gt;
Ist sie das? Falls du denkst, das FDM (Flugdynamikmodell) ist nicht korrekt: Ein FDM ist nur so gut wie die zugrundeliegenden Daten. Das FDM der c182s benutzt reale Koeffizienzdaten, wo diese verfügbar sind, aber nicht alle benötigten Koeffizienten wurden gefunden. Wo diese nicht aufzutreiben waren, haben wir Beschreibungen von Piloten echter C182 benutzt, und diese sind naturgemäß subjektiv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Nach google stimmen die meisten Piloten überein, dass die 182 schwerer zu fliegen ist, als die 172''''' &lt;br /&gt;
&lt;br /&gt;
Nicht wegen der Flugeigenschaften. Allerdings verbiegen sich viele Piloten beim Landen die Firewall, weil die Nase schwerer ist als bei einer 172. Viele Piloten mögen allerdings die größere Leistung, höhere Geschwindigkeit, die bessere Dienstgipfelhöhe, den [[constant speed propeller|Festdrehzahlpropeller]], Kühlklappen und die [[IFR]]-Ausrüstung. Und das ist auch schon der Grund - wegen all diesen Extras ist es schwerer, eine 182 zu fliegen, als eine 172. Die FAA zählt die Cessna 182 zu den &amp;quot;high perfomance aircraft&amp;quot;. Stell dir vor, du befindest dich in einer überfüllten Gegend wie KLAX, im Anflug auf den Flughafen, während du alle paar Sekunden dem Funkverkehr zuhörst, die Höhe und Geschwindigkeit überwachst, den Motor regelst, die Nadeln des [[VOR]] jagst, alles gleichzeitig während du auf den Verkehr achtest und in schlechtem Wetter unterwegs bist - herausfordernd!&lt;br /&gt;
&lt;br /&gt;
Vielleicht möchtest du dies hier lesen (englisch): [https://pilotbrian.blogspot.com/2009/05/stepping-up-to-c182.html Stepping Up to a C182 ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Wurde bei der C182S die Einfachheit zu fliegen gegenüber dem Realismus bevorzugt'''''&lt;br /&gt;
&lt;br /&gt;
Nein. Die Autoren benutzen echte Zahlen und Daten als Grundlage, sofern sie verfügbar sind, und das Ziel ist ein möglichst realistisches Modell. Beispielsweise stimmen die Flugwerte sehr nah mit denen im POH überein, und es werden echte aerodynamische Koeffiziente eingesetzt, falls verfügbar.&lt;br /&gt;
Falls du etwas entdeckts, dass nicht passt, eröffne bitte ein [https://github.com/HHS81/c182s/issues Ticket im Entwicklungsprojekt] und wir finden heraus, was los ist. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Warum hüpfe ich bei Landungen immer über die Rolbahn?'''''&lt;br /&gt;
&lt;br /&gt;
Die C182 ist sehr Frontlastig, vor allem im Vergleich zu einer 172. Das erschwert den Flare bei der Landung, und du brauchst eine relativ ungewohnte, [[:File:C182s-LandingPicture.jpg|hohe Neigung]] um nicht zu früh aufzusetzen. Auch die Geschwindigkeit ist ein kritischer Faktor, versuche nicht mit zu hoher Geschwindigkeit zu landen (peile 60-70 KIAS für den Endanflug an, je nach Wind und Flaps). Am wichtigsten aber: Versuche nicht, die Maschine mit dem Steuerhorn auf den Boden zu zwingen, und lande nie mit dem Bugrad zuerst.&lt;br /&gt;
Eine perfekte Landung erkennst du daran, dass du die Stall-Warnung hörst, kurz bevor du sanft mit den beiden Rädern des Hauptfahrwerks aufsetzt, und wenn du danach das Bugrad sanft aufsetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Auf 3.000 ft komme ich nicht über 110 Knoten. MP: 23, RPM: 2450, Fuelflow: 14. Was hab ich übersehen?'''''&lt;br /&gt;
&lt;br /&gt;
Die Checkliste! Wenn du nicht so schnell fliegst, wie du erwartest, prüfe: Gemisch, Propellergeschwindigkeit, Kühlklappen, Vereisung, Motordefekt (oder kalt).&lt;br /&gt;
Meistens wurde einfach vergessen, die Lande- oder Kühlklappen zu schließen. Ein anderer Grund kan sein, dass du [[De/Fluggeschwindigkeit#True_airspeed|KTAS (Knots True Airspeed) und KIAS (Knots Indicated Airspeed)]] verwechselst: Die Tabellen und Publikatoinen geben die Geschwindigkeit oft in KTAS an, und du musst KTAS vom {{wikipedia|Fahrtmesser|lang=de}} ablesen. Wie das geht? - lies weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''''' Wie lese ich meine wahre Fluggeschwindigkeit ab? ([[De/Fluggeschwindigkeit#True_airspeed|KTAS]])?'''''&lt;br /&gt;
&lt;br /&gt;
Der {{wikipedia|Fahrtmesser|lang=de}} hat ein kleines Fenster am oberen Rand. Mit dem Drehrad links unten stellst du die dahinterliegende Scheibe so ein, dass die Höhe (bei Standarddruck=29.92 inHG!) mit der Außentemperatur übereinstimmt. Im unteren Fenster des Fahrtmessers kannst du dann einfach über die Nadel die KTAS ablesen.&lt;br /&gt;
&lt;br /&gt;
[[:File:C182s-ais-tas.png|Es gibt einen Screenshot]] der die Verwendung der TAS-Scheibe zeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Als ich in kaltem Wetter geflogen bin, verlor ich Fahrt und bin abgestürzt. Wo ist die Vergaservorwärmung?'''''&lt;br /&gt;
&lt;br /&gt;
Die Cessna 182S hat keinen Vergaser, da sie einen Motor mit Direkteinspritzung benutzt. Was du allerdings erfahren hast, war Vereisung des Propellers und Flugzeugs.&lt;br /&gt;
Mit diesem Flugzeugtyp ist es nicht erlaubt, unter Bedingungen zu fliegen, die wahrscheinlich zu Vereisung führen. Vermeide feuchte Luft (Wolken....) bei Temperaturen um den Gefrierpunkt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Cessna 182S lässt sich nicht starten'''''&lt;br /&gt;
&lt;br /&gt;
Möglicherweise ist folgendes passiert:&lt;br /&gt;
# vielleicht bist du der checkliste nicht akkurat genug gefolgt.&lt;br /&gt;
# vielleicht hast du den Motor beim Primen absaufen lassen. Folge [[De/Cessna_182S#Motor_Kaltstart_.28manual_and_complex_startup.29|der Prozedur am Ende dieses Abschnittes]].&lt;br /&gt;
# Nach einem missglückten Motorstart bei Temperturen unter dem Gefrierpunkt könnten nun die Zündkerzen vereist sein. Schließe das Vorheizgerät an und versuche es nach 5-10 (simulierten) Minuten erneut.&lt;br /&gt;
# Der Motor ist einfach zu kalt um anzuspringen. Schließe das Vorheizgerät an.&lt;br /&gt;
# du hast den Motor früher so beschädigt, dass er jetzt nicht mehr starten kann (hast du dunklen Qualm aus der Motorhaube bemerkt?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Mein Motor überhitzt beim Starten/Steigflug dauernd!'''''&lt;br /&gt;
&lt;br /&gt;
Sobald du alle Hindernisse überflogen hast solltest du die Motorleistung reduzieren. Überwache die CHT-Anzeige engmaschig, und nimm die Leistung spätestens vor dem oberen Limit zurück.&lt;br /&gt;
Schau auch in den &amp;quot;Normal enroute climb&amp;quot; Abschnitt der Checkliste, um Details zu den Einstellungen zu finden (Kurzgesagt: halte Gas und Treibstoffluss im grünen Bereich, Kühlklappen offen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Warum kann ich die Flügelenden und die Motorhaube nicht sehen?'''''&lt;br /&gt;
&lt;br /&gt;
Die Kopf/Augenposition wurde sorgfältig ausgewählt, nachdem wir Bilder der Cessna 182S/T und Pilotenberichte verglichen haben. Wenn du das ansiehst, stellst du fest, dass die Augenhöhe des Piloten mit der Oberkante des seitlichen Fensterrahmens übereinstimmt. Der Flügel sitzt jedoch viel höher, d.h. es ist unmöglich, das Flügelende zu sehen.&lt;br /&gt;
Der Blendschutz des Armaturenbretts ist ziemlich hoch, und so kannst du die Motorhaube vor dir nicht sehen.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsstand / Fehler / ToDos ==&lt;br /&gt;
&lt;br /&gt;
Dieses Flugzeugmodell wird kontinuierlich weiterentwickelt. Hierfür gibt es ein öffentliches [https://github.com/HHS81/c182s Repository], in dem auch eine [https://github.com/HHS81/c182s/issues Liste von offenen Fehlern und Erweiterungsideen] geführt wird. Das Repository ist einen Besuch wert!&lt;br /&gt;
&lt;br /&gt;
* '''Defektes Fahrwerk in Multiplayer''': Das Schadensmodell wurde 5/2021 für FlightGear 2020.4.0 erweitert um Schaden daran zu simulieren. Ältere Versionen (2020.3 und älter) erhalten die Multiplayer-Daten hierfür nicht. Das führt dazu, dass das das &amp;quot;Fahrwerk-OK&amp;quot;-Property konstant ein defektes Fahrwerk für ältere Modelle anzeigt, wenn man selbst ein neueres Modell geladen hat. Die Lösung ist, dass der Pilot, der die ältere Modellversion hat, auf die neuere Version aktualisiert (aus FGADDON über den Launcher).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die aktuellste Entwickerversion benutzen ===&lt;br /&gt;
Wenn du die aktuellste (potentiell unveröffentlichte) Version von github benutzen möchtest, kannst du sie ganz einfach herunterladen.&lt;br /&gt;
Es kann sein, dass diese Version nicht mit älteren FlightGear-Versionen funktioniert. Die Entwicklung zielt normalerweise darauf ab, die aktuell stabile FlightGear-Version zu unterstützen, allerdings kann es auch passieren, dass auf neueste Entwicklungen in FlightGear aufgebaut wird, und dann funktioniert das Flugzeug nur auf der FlightGear Entwicklerversion.&lt;br /&gt;
&lt;br /&gt;
* Erstelle an einem für dich passenden Ort eine neuen Ordner namens &amp;quot;Aircraft&amp;quot; (falls du noch keinen solchen hast). Füge diesen Ordner im FlightGear-Starter im &amp;quot;Addons&amp;quot;-Tab als &amp;quot;Zusätzliche Flugzeug-Verzeichnisse&amp;quot; hinzu.&lt;br /&gt;
* Lade ein ZIP-Paket herunter (siehe Links in &amp;quot;Versionen&amp;quot; unten)&lt;br /&gt;
* Entpacke dieses ZIP-Paket in deinen &amp;quot;Aircraft&amp;quot;-Ordner&lt;br /&gt;
* Benenne den Ordner um: &amp;lt;code&amp;gt;c182s-&amp;lt;version&amp;gt;&amp;lt;/code&amp;gt; =&amp;gt; &amp;lt;code&amp;gt;c182s&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Versionen:'''&lt;br /&gt;
* Die letzte offizielle Veröffentlichug findest du hier: https://github.com/HHS81/c182s/releases. Dieses Release wird normalerweisein FGADDON für die nächste stabile FlightGear-Version (&amp;quot;next&amp;quot;) hochgeladen und ist dann über den FlightGear-Starter bequem zu installieren. Kompatible Änderungen werden auch Fallweise in die aktuelle stabile FlightGear-Version zurückportiert.&lt;br /&gt;
* Aktuellster Entwicklungscode (&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;-branch) kann hier bezogen werden: https://github.com/HHS81/c182s/archive/refs/heads/master.zip&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{screenshot cat&lt;br /&gt;
| category = Cessna 182S screenshots&lt;br /&gt;
| subject  = der Cessna 182S&lt;br /&gt;
| image    = C182-default.jpg&lt;br /&gt;
}}{{-}}&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
GXLTGAltenrhein.jpg|Flugzeug auf dem Vorfeld St. Gallen-Altenrhein/ Schweiz&lt;br /&gt;
Cessna182S compositor2.jpg|Flugzeug im Dunkeln, alle Lichter an&lt;br /&gt;
c182s.jpg|Cessna 182S am Abend&lt;br /&gt;
c182-cockpit-view.jpg|Standard Cockpitsicht&lt;br /&gt;
c182-external2.jpg|HB-CZV livery&lt;br /&gt;
c182-external3.jpg|D-ELFP livery&lt;br /&gt;
c182-external5.jpg|Cessna 182S über Kalifornien&lt;br /&gt;
c182-external6.jpg|Weitere Ansicht des HB-CZV livery&lt;br /&gt;
C182-4.jpg|Taking off&lt;br /&gt;
c182-rosskopf-at-dusk.jpg|Cessna 182S bei Roßkopf in Freiburg/ Deutschland&lt;br /&gt;
C182STakeOff.jpg|Cessna 182S mit selbstgewählter Kennung bei Siegerland / Deutschland&lt;br /&gt;
C182s-LandingPicture.jpg|C182s Landung, zeigt die nötige hohe Neigung&lt;br /&gt;
C182SDavtron803.jpg|Die Davtron 803 digitaluhr in Aktion&lt;br /&gt;
C182SWinterKit.jpg|Winterkit ausgerüstet, und Vorheizen mit dem Dragon heater&lt;br /&gt;
C182SFuelManagement.jpg|Fuel Management Dialog&lt;br /&gt;
c182-rain.jpg|Regeneffekt auf der Windschutzscheibe&lt;br /&gt;
C182-oil-cap.png|Position der Klappe zum Ölmesstab&lt;br /&gt;
C182SOilManagement.jpg|Oil Management Dialog&lt;br /&gt;
C182-fuelports.png|Treibstoffwähler und -filter Prüfports&lt;br /&gt;
c182-night-take-off.jpg|Ready to take off bei Nacht&lt;br /&gt;
c182-3.jpg|D-ELFP am Abend&lt;br /&gt;
C182SPitot.jpg|Pitot, Cover und Nachricht&lt;br /&gt;
C182SFreeMovementCheck.jpg|Prüfen der Querruder&lt;br /&gt;
C182SCustomRegistration.jpg|Selbstwählbare Kennung&lt;br /&gt;
c182-external4.jpg|N182PJ livery&lt;br /&gt;
c182-external-at-night.jpg|Default livery bei Nacht&lt;br /&gt;
c182-external1.jpg|N321HW livery&lt;br /&gt;
C182Scrashed.jpg|Flugzeug beschädigt&lt;br /&gt;
AboveSouthGermany.jpg|Flugzeug fliegt über Süddeutschland&lt;br /&gt;
Cessna182S compositor.jpg|Flugzeug im Dunkel, alle Lichter an&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{Wikipedia|Cessna 182 Skylane|lang=en}}&lt;br /&gt;
* [http://www.freechecklists.net/Resources/Cessna/182S+Skylane/ Links to Cessna 182S Checklists and W&amp;amp;B sheet]&lt;br /&gt;
* [http://tssflyingclub.org/documents/C182S_POH.pdf Cessna 182S POH]&lt;br /&gt;
* [https://www.aopa.org/go-fly/aircraft-and-ownership/aircraft-fact-sheets/cessna-182 Cessna 182S Aircraft Information Booklet]&lt;br /&gt;
* [http://www.jberaeroclub.com/uploads/1/7/4/0/17405139/c182maneuversguiderev2.pdf C182 Standardized flight maneuvers guide]&lt;br /&gt;
* [https://airplaneacademy.com/9-actionable-cessna-182-landing-tips-you-can-implement-today/ 9 Actionable Cessna 182 Landing Tips You Can Implement Today]&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
{{Cessna}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft with a cockpit-only autopilot]]&lt;br /&gt;
[[Category:Red Griffin ATC compatible aircraft]]&lt;br /&gt;
&lt;br /&gt;
[[en:Cessna 182S]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Cessna_182S&amp;diff=139640</id>
		<title>Cessna 182S</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Cessna_182S&amp;diff=139640"/>
		<updated>2024-04-08T16:26:26Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Feature-List: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{PAGENAME}}/info}}&lt;br /&gt;
&lt;br /&gt;
The '''Cessna 182S Skylane''' is an American four-seat, single-engine, light [[Aircraft|airplane]], built by [[Cessna]] between 1996 and 2001. It uses a fuel-injected Textron Lycoming IO-540 AB1A5 with 230 HP at 2,400 RPM.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
The Cessna 182S is one of the high-quality aircraft models in FlightGear. &lt;br /&gt;
&lt;br /&gt;
The new Cessna 182S has a very detailed 3D model and a cockpit with highly detailed textures. Most of the switches in the cockpit are already clickable and working. It has a very realistic FDM based on real aerodynamic coefficients and the pilot operating handbook; engine power, EGT and fuel performance are tuned according the pilot operating handbook, the weight and balance behaves like written in the POH. Fly by the book - a link to real POH is given at the end of this page.&lt;br /&gt;
 &lt;br /&gt;
[[File:c182-panel-detail.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
There are currently several liveries available: default Cessna livery, Blank, D-ELFP, HB-CZV, N182PJ, N321HW and some Custom registration Liveries.&lt;br /&gt;
&lt;br /&gt;
The aircraft has a simulation of the [[Bendix/King KAP140 Autopilot]]. The cockpit can be illuminated at night by using the glareshield lighting, pedestal lighting and instruments/ radio lighting, controlled by two knobs. Dome lights which illuminates the cabin in a realistic way are in work. The knobs have two modes each, which can be used by clicking and dragging horizontally or vertically.&lt;br /&gt;
&lt;br /&gt;
Also, if the user has enabled ALS (Atmospheric light scattering) in the Rendering Options, some effects are activated such as cockpit shadows, visible landing lights from the cockpit and rain effect on the windshield.&lt;br /&gt;
&lt;br /&gt;
The Cessna 182S comes with static objects which can be activated via the Ground Equipment dialog in the aircraft menu. These include a fuel tank trailer, ladders to access the fuel caps (and which the walker can climb(only in FG Versions before 2017.3.1 !!), ground power unit and a Dragon Engine Pre-Heater. Security cones are also available. Special Feature: The ground equipment will stay on ground where placed, independent from the movement of the aircraft!  The aircraft can also go through a pre-flight check: wheel chocks, tie-downs and the pitot tube cover can now be added or removed.  &lt;br /&gt;
&lt;br /&gt;
[[File:c182-objects.jpg|600px|center|Cessna 182S with static elements]]&lt;br /&gt;
&lt;br /&gt;
==Feature-List:==&lt;br /&gt;
For details and usage hints, please also read the [https://github.com/HHS81/c182s/blob/master/Documentation.md documentation].&lt;br /&gt;
*accurate flight model based on real test aerodynamic coefficients and POH&lt;br /&gt;
* accurate fuel flow numbers, engine power, airspeed and climbrate in nearly all pressure altitudes and temperatures with less than 5% difference from POH&lt;br /&gt;
* realistic stall behavior&lt;br /&gt;
* calculation of real KIAS based on KCAS, based on POH&lt;br /&gt;
* accurate weight and balance behavior&lt;br /&gt;
&lt;br /&gt;
* New Start-up States: aircraft can be initialized in cruise, landing, takeoff and more states&lt;br /&gt;
* autostart for beginners&lt;br /&gt;
&lt;br /&gt;
* fully simulated fuel system: fuel flow by gravity, engine pump and fuel pump simulated for each of the two tanks,; engine needs correct priming procedure according POH, fuel contamination simulated&lt;br /&gt;
* realistic electrical system, battery charge state depending on temperature, working circuit breakers&lt;br /&gt;
* fully simulated oil management (temperature, ....)&lt;br /&gt;
* simulation of cabin heat and defrost&lt;br /&gt;
* simulation of icing to wings, propellers and engines in icing conditions&lt;br /&gt;
* detailed damage and failure simulation&lt;br /&gt;
&lt;br /&gt;
* High quality 3d-model, textures and animations&lt;br /&gt;
* Realistic exterior reflection shaders with fresnel effect and normalmap&lt;br /&gt;
* selectable chromed spinner and wheel fairings&lt;br /&gt;
* Very detailed 3d-interior &lt;br /&gt;
* moveable sun-visors&lt;br /&gt;
* all cockpit switches are working&lt;br /&gt;
* fully working audio panel&lt;br /&gt;
* fully simulated [[Bendix/King_KAP140_Autopilot]]&lt;br /&gt;
* fully simulated [[Davtron M803]] digital clock&lt;br /&gt;
* fully simulated Bendix King avionics stack (two [[Kx165|KX-165 VHF COM/NAV radios]], [[Bendix_King_KN62A_DME|KN-62A DME]], [[Bendix_King_KT_76A|KT-67C Transponder]], [[Bendix_King_KR_87_ADF_Receiver|KR-87 ADF]])&lt;br /&gt;
* Realistic interior light effects in ALS-Renderer&lt;br /&gt;
* Interior shadows in ALS-Renderer&lt;br /&gt;
* interior glass frost and fog effects in ALS-Renderer&lt;br /&gt;
* Exterior 3d-shadow in ALS-Renderer&lt;br /&gt;
* selectable and fully simulated Winterization kit&lt;br /&gt;
* External equipement like ladders, safety cones, tie ups, pitot cover, wheel chocks, external power source, simulated external engine pre-heater with sound - they keep their position on ground!&lt;br /&gt;
* aircraft can be preflight checked outside (free movement check of flight control surfaces; oil, fuel, pitot heat, ....)&lt;br /&gt;
* Walker - can be used to follow the Checklist outside&lt;br /&gt;
* [[Howto:Implement_Towbar|Towbar]] connecting to the nosewheel for ground handling&lt;br /&gt;
* Save states: aircraft remembers last switch, systems and configuration state&lt;br /&gt;
* Many liveries&lt;br /&gt;
&lt;br /&gt;
=== Aerotowing gliders ===&lt;br /&gt;
The C182S and C182T are capable of  [[Howto: Do aerotow over the net|aerotowing over multiplayer]] by the glider pilot pressing {{key press|Ctrl|o}} while behind the Cessna.&lt;br /&gt;
The Cessna pilot can release the hook anytime by pressing {{key press|Shift|O}}&lt;br /&gt;
&lt;br /&gt;
=== Dual control ===&lt;br /&gt;
The plane supports [[Dual control]] where a copilot can ride along in another multiplayer plane. The copilot needs to start the C182 copilot variant and then select the pilots plane from the multiplayer dialog. The pilot also need to select the copilot this way.&lt;br /&gt;
&lt;br /&gt;
Currently the copilot is view-only and cannot take over controls.&lt;br /&gt;
&lt;br /&gt;
=== Parachuters ===&lt;br /&gt;
Via the aircraft options menu you can remove the right cabin door and seats, to haul parachuters. When clicking on your passengers, they will climb out to the strut and jump off.&lt;br /&gt;
The parachuters are even visible to other multiplayer aircraft (for that to work they need the C182s/t model installed)!&lt;br /&gt;
&lt;br /&gt;
Note: The climb out procedure is modeled in regards to weight shift and drag, but not yet animated (see [https://github.com/HHS81/c182s/issues/515 FR issue ticket #515]).&lt;br /&gt;
&lt;br /&gt;
=== Extended failures / surprise mode ===&lt;br /&gt;
The plane features a very detailed failure simulation and optionally can surprise you on the fly (if you wish, without notifying you). The failures dialog can be accessed by the aircraft menu, but you can also configure this for startup in your launcher by adding configuration options there. Please see [https://github.com/HHS81/c182s/blob/master/Documentation.md#extended-failure-simulation the documentation] for details.&lt;br /&gt;
&lt;br /&gt;
== Handling The Aircraft (beginner version)==&lt;br /&gt;
You can activate more realistic handling at any time in the aircraft dialog, like fuel contamination, engine oil management and priming needs.&lt;br /&gt;
&lt;br /&gt;
The full checklists are available ingame in the checklists dialog.&lt;br /&gt;
&lt;br /&gt;
=== Pre-Flight Inspection ===&lt;br /&gt;
[[File:C182-ready-for-take-off.jpg|270px||thumb|Cessna 182S ready for take off]]&lt;br /&gt;
It's recommended to use any exterior view or activate the walker for these procedures.&lt;br /&gt;
&lt;br /&gt;
* Cockpit: remove wind gust lock&lt;br /&gt;
* Check fuel quantity on both tanks (click on the red caps top of the wings)&lt;br /&gt;
* Left wing: remove pitot tube cover&lt;br /&gt;
* Left wing: remove tie-down&lt;br /&gt;
* Left wing: check for fuel contamination by clicking under the wing and take a fuel sample. If the sample is light blue, the fuel is not contaminated and can be returned to the tank. If the sample is transparent or partially transparent, you must discard it and take new samples until they are completely light blue&lt;br /&gt;
* Left main wheel: remove chocks&lt;br /&gt;
* Tail: remove tie-down&lt;br /&gt;
* Right wing: remove tie-down&lt;br /&gt;
* Right wing: check water contamination&lt;br /&gt;
* Right main wheel: remove chocks&lt;br /&gt;
* Right nose: check water contamination of fuel selector (below plane) and fuel strainer (right nose)&lt;br /&gt;
* Nose: remove wheel chocks&lt;br /&gt;
* Nose: check oil level (more than 6.0 quarts)&lt;br /&gt;
* Nose: remove chocks&lt;br /&gt;
&lt;br /&gt;
=== Engine Start (manual and complex startup) ===&lt;br /&gt;
* Mixture: Idle cut-off (red lever full out)&lt;br /&gt;
* Propeller: High RPM (blue lever full in)&lt;br /&gt;
* Throttle: Open 1/4 inch (black lever ~5%-8% setting inSim)&lt;br /&gt;
* Parking Brake: Applied ({{Key press|Shift|B}})&lt;br /&gt;
* Prop Area: Clear&lt;br /&gt;
* Master switch: ON (both)&lt;br /&gt;
* Auxiliary Fuel Pump Switch: ON &lt;br /&gt;
* Advance mixture to full rich, keep it 3-5sec&lt;br /&gt;
* Then Idle Cutoff &lt;br /&gt;
* Auxiliary Fuel Pump Switch: Off&lt;br /&gt;
* Magnetos: Both (Press {{Key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}} three times)&lt;br /&gt;
* Ignition: crank engine ({{Key press|S}} until engine fires)&lt;br /&gt;
&lt;br /&gt;
If the engine was warm already, it usually starts without priming by just setting Mixture to rich and cranking.&lt;br /&gt;
&lt;br /&gt;
If engine floods, then set mixture to idle cut off and throttle to 1/2 to full open and crank. When engine fires, set mixture to full rich and throttle to idle.&lt;br /&gt;
&lt;br /&gt;
=== Takeoff ===&lt;br /&gt;
* no flaps or flaps 10deg&lt;br /&gt;
* cowl flaps open ({{Key press|Shift|F}} several times)&lt;br /&gt;
* full throttle&lt;br /&gt;
* rotate at 50-60 KIAS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Climbout ===&lt;br /&gt;
* no flaps&lt;br /&gt;
* cowl flaps open&lt;br /&gt;
* full throttle&lt;br /&gt;
* 80 KIAS&lt;br /&gt;
* Reduce power to stay in the green arcs as soon as obstacles are clear&lt;br /&gt;
** Fuel flow: max 15Gph&lt;br /&gt;
** Throttle: max 23 in.Hg&lt;br /&gt;
&lt;br /&gt;
=== Cruise ===&lt;br /&gt;
[[File:c182-default.jpg|270px||thumb|Cessna 182S in the air]]&lt;br /&gt;
* 2000-2400 RPM&lt;br /&gt;
* 18-23 mp&lt;br /&gt;
* mixture rich of peak as recommended lean mixture setting for cruise or 125°F rich for best power&lt;br /&gt;
* speed between 120-140 knots depending on the power settings&lt;br /&gt;
* cowl flaps closed ({{Key press|f}} as appropriate -&amp;gt; watch CHT gauge)&lt;br /&gt;
&lt;br /&gt;
=== Landing ===&lt;br /&gt;
* flaps 20deg or full flaps&lt;br /&gt;
* 60-70 KIAS&lt;br /&gt;
&lt;br /&gt;
=== Airspeeds ===&lt;br /&gt;
: ''See also [[Aircraft speed#V speeds]]''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Airspeed !! IAS&lt;br /&gt;
|-&lt;br /&gt;
| Stall speed, landing configuration, V&amp;lt;sub&amp;gt;S&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 36 kt&lt;br /&gt;
|-&lt;br /&gt;
| Stall speed, clean, V&amp;lt;sub&amp;gt;S&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 43 kt&lt;br /&gt;
|-&lt;br /&gt;
| Rotation speed, V&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; || 55 kt&lt;br /&gt;
|-&lt;br /&gt;
| Best angle of climb speed, V&amp;lt;sub&amp;gt;X&amp;lt;/sub&amp;gt; || 63 kt&lt;br /&gt;
|-&lt;br /&gt;
| Best rate of climb speed, V&amp;lt;sub&amp;gt;Y&amp;lt;/sub&amp;gt; || 80 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximum flap extended speed, V&amp;lt;sub&amp;gt;FE&amp;lt;/sub&amp;gt; || 100 kt&lt;br /&gt;
|-&lt;br /&gt;
| Manoeuvring speed, V&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; || 110 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximum structural cruising speed, V&amp;lt;sub&amp;gt;NO&amp;lt;/sub&amp;gt; || 140 kt&lt;br /&gt;
|-&lt;br /&gt;
| Never exceed speed, V&amp;lt;sub&amp;gt;NE&amp;lt;/sub&amp;gt; || 175 kt&lt;br /&gt;
|-&lt;br /&gt;
| Max. Crosswind at landing || 15 kt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Cruise, 80% power,  6,000 ft || 140 kt&lt;br /&gt;
|-&lt;br /&gt;
|Cruise, 65% power,  8,000 ft || 130 kt&lt;br /&gt;
|-&lt;br /&gt;
|Cruise, 55% power, 10,000 ft || 121 kt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Range,  75% power,  6,000 ft || 820 nm&lt;br /&gt;
|-&lt;br /&gt;
|Range,  65% power,  8,000 ft || 910 nm&lt;br /&gt;
|-&lt;br /&gt;
|Range,  55% power, 10,000 ft || 968 nm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Best Climb&amp;lt;ref&amp;gt;POH 5-19; with 3100lbs, sea level, 2400 RPM, Full Throttle, mixture set to Maximum power Fuel Flow placard, Cowl Flaps Open, Std. Temperature&amp;lt;/ref&amp;gt; || 924fpm&lt;br /&gt;
|-&lt;br /&gt;
|Service Ceiling || 18,100ft&lt;br /&gt;
|-&lt;br /&gt;
|Takeoff ground roll: 795ft (242m) over 50ft obstacle || 1,514ft&lt;br /&gt;
|-&lt;br /&gt;
|Landing ground roll: 590ft (180m) over 50ft obstacle || 1,390ft&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:c182-cockpit-at-night.jpg|600px|center|Cessna 182S panel illumination]]&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
'''''I wonder why would the 182s be easier to fly than the c172p?'''''&lt;br /&gt;
&lt;br /&gt;
Is it? If you think the fdm is wrong: A fdm is only so good as the datas available. The c182s-fdm uses real coefficient data where available, but not all needed coeeficients could be found. Where not available, pilot reports had been used. And they are from a subjective view of the pilot.&lt;br /&gt;
&lt;br /&gt;
'''''According to google, most pilots agree that the 182s is actually harder to fly than the 172p''''' &lt;br /&gt;
&lt;br /&gt;
Not because of its flight characteristics. Though many pilot bends their firewalls on touchdown, due the nose heaviness of that aircraft.  But a lot pilot likes the C182 more because of more power, more speed, higher possible altitudes, [[constant speed propeller]], cowl-flaps and the [[IFR]]-equipement. And that`s the reason - due to that all it is much more challenging to fly than the Cessna 172. So FAA counts the Cessna 182 to the high perfomace aircraft. Imagine beeing in a crowded area like KLAX, approaching the airport while listening to Radio calls every few seconds, watching speed, altitude, manage the engine and prop speed, chasing VOR-needles and watching the traffic around at the same time in bad weather condition - challenging!&lt;br /&gt;
You might wanna read this: [https://pilotbrian.blogspot.com/2009/05/stepping-up-to-c182.html Stepping Up to a C182 ]&lt;br /&gt;
&lt;br /&gt;
'''''Is the C182S made easier to fly, instead of more realistic to fly?'''''&lt;br /&gt;
&lt;br /&gt;
No. The authors uses real numbers, datas, coefficients and more where available, aiming to get everything realistic as it can be. As an example it matches all the numbers given in the POH, and uses real aerodynamic coeffcients for the fdm where available. If it doesn`t fly as you expect, you might be used to FSX? Just kidding... &lt;br /&gt;
Anyway, if encounter something you think it isn`t right, file an Issue-report [https://github.com/HHS81/c182s/issues here], and we will find out.&lt;br /&gt;
&lt;br /&gt;
'''''Why do I always make bouncy landings?'''''&lt;br /&gt;
&lt;br /&gt;
The C182 is quite nose heavy, especially compared to a 172. This makes it harder to flare correctly, and you actually need [[:File:C182s-LandingPicture.jpg|a high pitch attitude]] to not touchdown too early. Also airspeed is a critical factor, don't try to land too fast (aim for 60-70 KIAS, depending on flaps and wind). Most importantly: Don't try to force the plane down with the elevator and never land on the nose gear first. You had a perfect landing, when you hear the stall horn shortly before the main wheels gently touch the runway, and when you managed to lower the nose wheel gently afterwards.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''At 3,000 ft, I can't get over 110 knots. MP: 23 RPM: 2450 FF: 14. What am I missing?'''''&lt;br /&gt;
&lt;br /&gt;
The checklist! If it doesn`t get the speed as you expect, check: Mixture, prop rpm, cowl flaps, oil temp, icing, engine damaged or cold,... Probably you simply forget to close the cowl flaps.&lt;br /&gt;
Another reason could be that you mistake KTAS (Knots True AirSpeed) with KIAS (Knots Indicated AirSpeed). The tables and many publications gives the speeds in KTAS. So you have to read the KTAS-values from your instruments, not the KIAS. How to?- just read below.&lt;br /&gt;
&lt;br /&gt;
''''' Where I can see my True Airspeed ([[TAS|KTAS]])?'''''&lt;br /&gt;
The Air Speed Indicator has a dial at the upper part of the instrument face. So you simply dial in the pressure altitude (=Altimeter set to 29.92) in ft via the knob, and align it with the temperature mark just below. &lt;br /&gt;
Now you can read your true airspeed in the lower left window of your instrument.&lt;br /&gt;
[[:File:C182s-ais-tas.png|There is a screenshot]] showing an example of using the TAS disc.&lt;br /&gt;
&lt;br /&gt;
'''''I flew in cold weather, but suddenly crashed because the aircraft slowed down. Where is the carb heat?'''''&lt;br /&gt;
&lt;br /&gt;
The Cessna 182S uses an fuel-injected engine - like many modern cars. So there is no carburetor. But what you experienced is the icing of the prop and the aircraft body. Unfortunately there is indeed a bug: propeller icing of constant speed props can`t be simulated yet with JSBSim. The C182S-team tried to find a work-around, but might not have yet found the best solution....Not everything can be perfect! Anyway: with this type of aircraft you are not allowed to fly in known icing-conditions!&lt;br /&gt;
&lt;br /&gt;
'''''Cessna 182S refuses to start'''''&lt;br /&gt;
&lt;br /&gt;
The following might be happening:&lt;br /&gt;
# you probably didn`t follow the checklist.&lt;br /&gt;
# you might have flooded the engine. Follow this procedure: Pull back mixture to cut off, advance throttle to about about little more than 50-60%, then operate the starter again for a while. If the engine fires, promptly advance the mixture to full rich and return throttle to Idle.&lt;br /&gt;
# you may encounter spark plug icing in cold environment after a misfired start. Preheat the engine, wait 5-10 (simulated) minutes and try again.&lt;br /&gt;
# the engine might simply be too cold to be able to start. Preheat the engine.&lt;br /&gt;
# you damaged the engine previously to a state where it won't start again (have you seen black smoke from the cowling?)&lt;br /&gt;
&lt;br /&gt;
'''''I always overheat my engine at takeoff/climbout!'''''&lt;br /&gt;
&lt;br /&gt;
Reduce power when you cleared all takeoff obstacles. Closely watch your CHT gauge: reduce at latest when approaching the upper CHT limit. See the &amp;quot;Normal enroute climb&amp;quot; checklist section for details on power settings (in short: keep manifold pressure and fuel flow in the greens, open cowl flaps).&lt;br /&gt;
&lt;br /&gt;
'''''Why I can`t see the wingtip and the cowl?'''''&lt;br /&gt;
&lt;br /&gt;
The eye level position has been carefully set comapring informations from pictures showing the Cessna 182S or Cessna 182T and pilot reports. If you compare, you can see that the eye level of the pilot is sitting at the level of the upper edge of the side window frame. The wing root sits much higher, the wingtip even more. So it is impossible to see the wingtip. &lt;br /&gt;
The glareshield is quite high on the newer Cessna, and from you usual position you are not able to see the engine cowling in front of you.&lt;br /&gt;
And the eye level position is also set to the fact that a good landing is provided why you flare just before the touchdown. Your flare will be correct, when the upper edge of the glareshiels is virtually touching the horizon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Versions ==&lt;br /&gt;
&lt;br /&gt;
=== Stable release ===&lt;br /&gt;
The Last official release for your matching FlightGear version can be downloaded from the Launcher (FGAddon default Hangar).&lt;br /&gt;
There you can also easily update the plane, once updates get published.&lt;br /&gt;
&lt;br /&gt;
Alternatively, GIT releases (and changelogs between versions) are here: https://github.com/HHS81/c182s/releases&lt;br /&gt;
&lt;br /&gt;
These releases are usually also synced to FGAddons trunk hangar (used by fgfs next, which gets stable together with the next fgfs release and can be updated to from the launcher)&lt;br /&gt;
&lt;br /&gt;
=== Development status/Issues/TODO ===&lt;br /&gt;
&lt;br /&gt;
This aircraft is undergoing a constant development, which can be followed on its [https://github.com/HHS81/c182s repository], where a [https://github.com/HHS81/c182s/issues list of issues and future enhancements] can also be found. Worth a visit!&lt;br /&gt;
&lt;br /&gt;
* '''Damaged Gear in Multiplayer''': The damage model was updated recently (5/2021 for 2020.4.0) to also simulate gear collapse. Older versions (2020.3 and before) do not simulate this and thus do not transmit the necessary MP packets. This makes the &amp;quot;gear-OK&amp;quot; Property constantly showing a damage gear, if you use a newer model. The solution is that the pilot using the version showing the &amp;quot;crippled&amp;quot; gear to update his flightgear and plane to the latest FGAddon version OR use the [https://github.com/HHS81/c182s/releases/tag/version-1.4 GitHub release 1.4].&lt;br /&gt;
&lt;br /&gt;
=== Using the latest development/git version ===&lt;br /&gt;
{{note|This may not work properly with the current stable (and older) flightgear versions. Development ''usually'' targets the latest flightgear stable, but may use also fresh features of flightgears &amp;quot;next&amp;quot; version.}}&lt;br /&gt;
&lt;br /&gt;
If you want to use the latest github versions, they can be obtained here (&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;-branch): https://github.com/HHS81/c182s/archive/refs/heads/master.zip&lt;br /&gt;
&lt;br /&gt;
* Make a new &amp;quot;Aircraft&amp;quot; folder (in case you don't already have one). Then add that directory to your launchers &amp;quot;Addons&amp;quot; tab as aircraft folder.&lt;br /&gt;
* Download a zipped version you want to use (links below).&lt;br /&gt;
* Extract the zipfile into your &amp;quot;Aircraft&amp;quot; folder.&lt;br /&gt;
* Rename the extracted &amp;lt;code&amp;gt;c182s-&amp;lt;version&amp;gt;&amp;lt;/code&amp;gt; folder to &amp;lt;code&amp;gt;c182s&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{screenshot cat&lt;br /&gt;
| category = Cessna 182S screenshots&lt;br /&gt;
| subject  = the Cessna 182S&lt;br /&gt;
| image    = C182-default.jpg&lt;br /&gt;
}}{{-}}&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
GXLTGAltenrhein.jpg|aircraft sitting on the apron of St. Gallen-Altenrhein/ Switzerland&lt;br /&gt;
Cessna182S compositor2.jpg|aircraft sitting in the dark, all lights on&lt;br /&gt;
c182s.jpg|Cessna 182S at dusk&lt;br /&gt;
c182-cockpit-view.jpg|Default cockpit view&lt;br /&gt;
c182-external2.jpg|HB-CZV livery&lt;br /&gt;
c182-external3.jpg|D-ELFP livery&lt;br /&gt;
c182-external5.jpg|Cessna 182S over California&lt;br /&gt;
c182-external6.jpg|Another view of the HB-CZV livery&lt;br /&gt;
C182-4.jpg|Taking off&lt;br /&gt;
c182-rosskopf-at-dusk.jpg|Cessna 182S around Roßkopf in Freiburg/ Germany&lt;br /&gt;
C182STakeOff.jpg|Cessna 182S with custom registration at Siegerland Airport/ Germany&lt;br /&gt;
C182s-LandingPicture.jpg|C182s landing, showing the needed high pitch attitude&lt;br /&gt;
C182SDavtron803.jpg|The Davtron 803 clock in action&lt;br /&gt;
C182SWinterKit.jpg|Winterkit installed, and preheating the engine with an Engine Preheater&lt;br /&gt;
C182SFuelManagement.jpg|Fuel Management Dialog&lt;br /&gt;
c182-rain.jpg|Rain effect in the windshield&lt;br /&gt;
C182-oil-cap.png|Oil cap location&lt;br /&gt;
C182SOilManagement.jpg|Oil Management Dialog&lt;br /&gt;
C182-fuelports.png|Fuel selector and strainer quick drain valves location&lt;br /&gt;
c182-night-take-off.jpg|Ready to take off at night&lt;br /&gt;
c182-3.jpg|D-ELFP at dusk&lt;br /&gt;
C182SPitot.jpg|Pitot, Cover and message&lt;br /&gt;
C182SFreeMovementCheck.jpg|Checking the aileron&lt;br /&gt;
C182SCustomRegistration.jpg|The custom registration&lt;br /&gt;
c182-external4.jpg|N182PJ livery&lt;br /&gt;
c182-external-at-night.jpg|Default livery at night&lt;br /&gt;
c182-external1.jpg|N321HW livery&lt;br /&gt;
C182Scrashed.jpg|aircraft crashed&lt;br /&gt;
AboveSouthGermany.jpg|aircraft flying above South Germany&lt;br /&gt;
Cessna182S compositor.jpg|aircraft sitting in the dark, all lights on&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{Wikipedia|Cessna 182 Skylane|lang=en}}&lt;br /&gt;
* [http://www.freechecklists.net/Resources/Cessna/182S+Skylane/ Links to Cessna 182S Checklists and W&amp;amp;B sheet]&lt;br /&gt;
* [http://tssflyingclub.org/documents/C182S_POH.pdf Cessna 182S POH]&lt;br /&gt;
* [https://www.aopa.org/go-fly/aircraft-and-ownership/aircraft-fact-sheets/cessna-182 Cessna 182S Aircraft Information Booklet]&lt;br /&gt;
* [http://www.jberaeroclub.com/uploads/1/7/4/0/17405139/c182maneuversguiderev2.pdf C182 Standardized flight maneuvers guide]&lt;br /&gt;
* [https://airplaneacademy.com/9-actionable-cessna-182-landing-tips-you-can-implement-today/ 9 Actionable Cessna 182 Landing Tips You Can Implement Today]&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
{{Cessna}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft with a cockpit-only autopilot]]&lt;br /&gt;
[[Category:Red Griffin ATC compatible aircraft]]&lt;br /&gt;
&lt;br /&gt;
[[de:Cessna 182S]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:Kn62a.png&amp;diff=139639</id>
		<title>File:Kn62a.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:Kn62a.png&amp;diff=139639"/>
		<updated>2024-04-08T16:25:51Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: Uploaded own work with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Bendix/Kiing KN-62A DME}}&lt;br /&gt;
|date=2024-04-08&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Hbeni|Hbeni]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{self|cc-by-sa-4.0}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Instr]]&lt;br /&gt;
[[Category:Screenshots of cockpit details]]&lt;br /&gt;
[[Category:Aircraft instruments]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=De/Cessna_182S&amp;diff=139638</id>
		<title>De/Cessna 182S</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=De/Cessna_182S&amp;diff=139638"/>
		<updated>2024-04-08T16:08:32Z</updated>

		<summary type="html">&lt;p&gt;Hbeni: /* Feature-Liste: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:{{#titleparts:{{PAGENAME}}||2}}/info}}&lt;br /&gt;
&lt;br /&gt;
Die '''Cessna 182S Skylane''' ist ein amerikanischer, viersitziger, einmotoriger Schulterdecker mit festem Dreibeinfahrwerk. [[Cessna]] baute es zwichen 1996 und 2001.&lt;br /&gt;
Sie benutzt ein Textron Lycoming IO-540 AB1A5 mit Direkteinspritzung, das 230PS bei 2400 RPM Leistung erzeugt.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Die Cessna 182S ist eines der hochqualitativen Modelle in FlightGear.&lt;br /&gt;
&lt;br /&gt;
Das Cockpit hat ein sehr detailliertes 3D-modell. Alle Schalter und Leuchten sind funktional. Das FDM ist sehr realistisch und basiert auf echten aerodynamischen Koeffizienten sowie dem Pilots Operating Handbook (POH). Triebwerksleistung, EGT und Treibstoffeffizienz sind anhand der Performancedaten des POH eingestellt. Gewicht und Verteilung verhalten sich ebenfalls wie im POH beschrieben. Fliege nach dem Handbuch - ein link dazu is am Ende dieses Artikels verlinkt.&lt;br /&gt;
&lt;br /&gt;
[[File:c182-panel-detail.jpg|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Das Flugzeugmodell bietet verschiedene Lackierungen an, darunter einige realistische von echten Vorbildern, aber auch generische, die eine eigene Typnummer unterstützen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im cockpit findet sich eine realistische Variante des [[De/Autopilot_Bendix/King_KAP140|Bendix KAP140 Autopilot]]. Das Cockpit kann mithilfe verschiedener Leuchtmittel beleuchtet werden (die beiden Cockpitknöpfe zum Drehen sowie die Überkopfleuchten; für den Notfall gibt es im Flugzeugmenü auch eine Taschenlampe).&lt;br /&gt;
&lt;br /&gt;
Mit aktiviertem ALS gibt es Regen- und Frosteffekte auf den Scheiben, Schatten im Cockpit sowie Lande- und Taxilichter.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch Bodenequipment wie eine externe Stromversorgung (-&amp;gt; Flugzeugmenü), Tankwagen, Leitern und ein Vorheizgerät.&lt;br /&gt;
Dazu kommt noch realistisches Preflight wie Sicherungsspangurte und Radkeile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:c182-objects.jpg|600px|center|Cessna 182S with static elements]]&lt;br /&gt;
&lt;br /&gt;
==Feature-Liste:==&lt;br /&gt;
Details und Nutzungshinweise sind auch in der [https://github.com/HHS81/c182s/blob/master/Documentation.md documentation] einzusehen.&lt;br /&gt;
* Akkurates Flugmodell, basierend auf aerodynamischen Koeffizienten und dem POH&lt;br /&gt;
* Akkurate Treibstoffverbrauchszalen, Triebwerksleistung, Geschwindikeit und Steigrate in nahezu allen Luftdruck- und temperaturumgebungen (&amp;lt;5% Unterschied zum POH)&lt;br /&gt;
* realistische Stalleigenschaften&lt;br /&gt;
* Berechnung des echten KIAS basierend auf KCAS, basierend auf dem POH&lt;br /&gt;
* Akkurate Gewichts- und -verteilungseigenschaften&lt;br /&gt;
&lt;br /&gt;
* Verschiedene Startkonfigurationen (z.b. &amp;quot;Start im Flug&amp;quot;)&lt;br /&gt;
* Autostart für Einsteiger&lt;br /&gt;
&lt;br /&gt;
* Vollständige Simulation des Treibstoffsystems: Treibstoffluss durch Gravitation, Benzinpumpen, korrekte Priming-Prozedur für Kaltstart (siehe POH), Treibstoffkontamination&lt;br /&gt;
* Realistische Bordelektronik (Batterieleistung abhängig von Temperatur; funktionierende Sicherungen)&lt;br /&gt;
* Vollständige Simulation des Ölmanagements (Temperatur, Füllstand, Öltyp...)&lt;br /&gt;
* Simulatin der Kabinentemperatur und Frost/angelaufene Scheiben&lt;br /&gt;
* Simulation der Flügel- und Properllervereisung, Vereisung der Luftfilter, Statikportöffnungen und des Pitotrohrs&lt;br /&gt;
* Detaillierte Schadens- und Fehlersimulation&lt;br /&gt;
&lt;br /&gt;
* Hochqualitatives 3D-modell und texturen&lt;br /&gt;
* Realistische Reflektionen der Außenhaut&lt;br /&gt;
* Auswählbare Chromnabe für den Propeller und die Radabdeckungen&lt;br /&gt;
* Sehr detailliertes 3D-Interieur&lt;br /&gt;
* Funktionale und bewegliche Sonnenblenden&lt;br /&gt;
* Alle Cockpitknöpfe funktionieren&lt;br /&gt;
* Vollständig funktionierendes Audiopanel&lt;br /&gt;
* Vollständiger und realistischer [[De/Autopilot_Bendix/King_KAP140|Bendix KAP140 Autopilot]]&lt;br /&gt;
* Vollständig funktionierende [[De/Davtron M803|Davtron M803]] Digitaluhr&lt;br /&gt;
* Vollständig funktionierender Bendix King avionics stack (zwei [[De/Kx165|KX-165 VHF COM/NAV radios]], [[De/Bendix_King_KN62A_DME|KN-62A DME]], [[Bendix_King_KT_76A|KT-67 Transponder]], [[De/Bendix_King_KR_87_ADF|KR-87 ADF]])&lt;br /&gt;
* Realistische Innenbeleuchtung und Schatteneffekte mit ALS Renderer&lt;br /&gt;
* Angelaufene scheiben und Frostsimulation mit ALS Renderer&lt;br /&gt;
* Optionales und voll funktionsfähiges Winterausrüstungs-Kit&lt;br /&gt;
* Außenequipment wie Leitern, Pylonen, Sicherungselemente, Externe Stromversorgung, Vorheizgerät, ....&lt;br /&gt;
&lt;br /&gt;
* Fast vollständige Vorflugkontrolle&lt;br /&gt;
* Flugzeug merkt sich optional den letzten Zustand beim Verlassen von FlightGear&lt;br /&gt;
* Viele Lackierungen (mehrere mit multiplayerfähigen eigener Kennung)&lt;br /&gt;
&lt;br /&gt;
=== Flugzeugschlepp für Segelflieger ===&lt;br /&gt;
Die C182S und C182T sind fähig, [[Howto: Do aerotow over the net|Segelflieger im Mehrspielermodus zu schleppen]]. Hierfür muss der Segelflugpilot {{key press|Ctrl|o}} drücken, wenn er hinter der Cessna ist.&lt;br /&gt;
Der Cessnapilot kann den Haken jederzeit mit {{key press|Shift|O}} lösen.&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Copilot (Dual control) ===&lt;br /&gt;
Das Flugzeug unterstützt einen menschlichen Copiloten, der im Multiplayer mitfliegen kann [[Dual control|(&amp;quot;Dual control&amp;quot;)]].&lt;br /&gt;
Der Copilot muss die copilotvariante laden und dann das Pilotenflugzeug im &amp;quot;Multiplayer&amp;quot;-Menü auswählen.&lt;br /&gt;
Der Copilot muss entsprechend auf die gleiche Weise den Piloten auswählen.&lt;br /&gt;
&lt;br /&gt;
Der Copilot ist im Moment nur Zuschauer und kann selbst nicht ins Flugzeug eingreifen.&lt;br /&gt;
&lt;br /&gt;
=== Fallschirmspringer ===&lt;br /&gt;
Über das Flugzeugmenü kann die Cessna umgebaut werden (entfernen der rechten Tür und der Sitze), um Fallschirmspringer zu transportieren.&lt;br /&gt;
Werden die Passagiere angekickt, klettern sie hinaus und springen ab.&lt;br /&gt;
Die Fallschirmspringer sind sogar im Mehrspielermodus sichtbar, wenn die anderen Piloten das C182S-Modell installiert haben!&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Im Moment wird nur die Gewichtsverlagerung und der Windwiderstand simuliert, nicht das 3D-Modell beim Hinasuklettern (siehe [https://github.com/HHS81/c182s/issues/515 FR issue ticket #515]).&lt;br /&gt;
&lt;br /&gt;
=== Erweiterte Fehler / Überraschungsmodus ===&lt;br /&gt;
Das Flugzeug bietet eine sehr detaillierte Fehlersimulation an. Optional kannst du dich auch zufällig überraschen lassen (sogar, ohne dich über einen aufgetretenen Fehler zu informieren). Das Fehler-Dialogfenster kannst du über das Flugzeugmenü erreichen. Du kannst die zufälligen Fehler auch für den Simulatorstart konfigurieren, indem du Konfigurationsoptionen hinterlegst. Details sind in der [https://github.com/HHS81/c182s/blob/master/Documentation.md#extended-failure-simulation Dokumentation] einzusehen.&lt;br /&gt;
&lt;br /&gt;
== Flugzeugbedienung (für Einsteiger) ==&lt;br /&gt;
Du kannst jederzeit realistischere Simulationsoptionen über das Flugzeugmenü zuschalten; beispielsweise Treibstoffverunreinigung, Ölmanagement und realistische Motorsimulation inkl. Startverhalten.&lt;br /&gt;
&lt;br /&gt;
Generell bietet die Checkliste eine vollständige Kurzanleitung für die Grundfunktionen des Flugzeug. Die Checkliste ist im Menü &amp;quot;Hilfe&amp;quot; von FlightGear verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Vorflugkontrolle ===&lt;br /&gt;
[[File:C182-ready-for-take-off.jpg|270px||thumb|Cessna 182S bereit zum Start]]&lt;br /&gt;
Für die Vorflugkontrolle wird empfohlen, den &amp;quot;walker&amp;quot; zu aktivieren und damit um das Flugzeug zu laufen.&lt;br /&gt;
&lt;br /&gt;
Es wird empfohlen, eine Außenansicht oder den Walker hierfür zu verwenden und im Gegenuhrzeigersinn um das Flugzeug zu gehen.&lt;br /&gt;
* Cockpit: Entfernen der Sicherung am Steuerhorn&lt;br /&gt;
* Überprüfe die Treibstoffmenge durch Klicken auf die Tankdeckel oben auf jeder Fläche&lt;br /&gt;
* Linke Tragfläche: Entferne den Spanngurt&lt;br /&gt;
* Linke Tragfläche: Entferne die Abdeckung des Staurohrs&lt;br /&gt;
* Linke Tragfläche: Überprüfe den Treibstoff auf Verschmutzung durch Klicken unterhalb der Tragfläche und Entnahme einer Treibstoffprobe. Ist diese hellblau, so ist der Treibstoff nicht verschmutzt und die Probe kann in den Tank zurückgegeben werden. Ist sie (teilweise) durchsichtig, enthält der Tribstoff Wasser, und die Probe muss entsorgt werden. Der Vorgang ist so lange zu wiederholen, bis die Probe komplett hellblau ist&lt;br /&gt;
* Linke Seite: Entferne den Radkeil am Hauptrad&lt;br /&gt;
* Heck: Entferne den Spanngurt&lt;br /&gt;
* Rechte Tragfläche: Entferne die Spanngurte&lt;br /&gt;
* Rechte Tragfläche: Überprüfe den Treibstoff auf Verschmutzung&lt;br /&gt;
* Rechte Seite: Entferne den Radkeil am Hauptrad&lt;br /&gt;
* Rechte Schnauze: Überprüfe den Treibstoff auf Verschmutzung am Treibstoffwähler (unter dem Flugzeug) und Treibstoffilter (rechte Nase)&lt;br /&gt;
* Schnauze: Überprüfe den Ölstand durch Klicken auf den Ölstutzen in der Nase. Niedriger Ölstand ist unterhalb 6.0 Quarts.&lt;br /&gt;
* Schnauze: Entferne den Radkeil am Bugrad&lt;br /&gt;
&lt;br /&gt;
=== Motor Kaltstart (manual and complex startup) ===&lt;br /&gt;
* Gemisch: Idle-Cutoff (roter Hebel voll raus)&lt;br /&gt;
* Propeller: High RPM (blauer Hebel voll drin)&lt;br /&gt;
* Gashebel: 1/4 Zoll offen (schwarzer Hebel bei ~5%-8% Einstellung in der Simulation)&lt;br /&gt;
* Parkbremse: Angezogen ({{Key press|Shift|B}})&lt;br /&gt;
* Hauptschalter: An (beide roten Kippschalter)&lt;br /&gt;
* Treibstoff-Hilfspumpe: An&lt;br /&gt;
* Gemisch auf voll schieben, ca. 3 Sekunden halten, bis stetiger Treibstoffluss erreicht wird&lt;br /&gt;
* Dann Gemisch: Idle-Cutoff&lt;br /&gt;
* Treibstoff-Hilfspumpe: Aus&lt;br /&gt;
* Magnete: Beide (Drücke {{Key press|&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}} 3x)&lt;br /&gt;
* Zündung: Start (halte {{Key press|S}} bis der Motor läuft)&lt;br /&gt;
&lt;br /&gt;
Falls der Motor abgesoffen ist (zu viel Priming mit der Treibstoffpumpe):&lt;br /&gt;
* Gemisch: Idle-Cutoff&lt;br /&gt;
* Gashebel: 1/2 bis voll eingeschoben&lt;br /&gt;
* Zündung: Start (halte {{Key press|S}} bis der Motor läuft). Sobald der motor anspringt, Gemisch voll angereichert (roter Hebel rein) und Gashebel auf Leerlauf (fast ganz heraus).&lt;br /&gt;
&lt;br /&gt;
War der Motor bereits vor kurzem auf Betriebstemperatur, reicht es in der Regel, das Gemisch auf Rich (&amp;quot;Fett&amp;quot;) zu stellen (roter Hebel rein), und den Starter zu betätigen.&lt;br /&gt;
&lt;br /&gt;
Alternativ zum manuellen (kalt-)Start gibt es eine Autostartfunktion im Flugzeugmenü.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Start ===&lt;br /&gt;
* Keine Landeklappen, oder 10 Grad&lt;br /&gt;
* Kühlklappen offen ({{Key press|Shift|F}} mehrfach drücken)&lt;br /&gt;
* Vollgas&lt;br /&gt;
* Rotieren bei ca. 50-60 KIAS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steigflug ===&lt;br /&gt;
* Keine Landeklappen&lt;br /&gt;
* Kühlklappen offen&lt;br /&gt;
* Vollgas&lt;br /&gt;
* 80 KIAS&lt;br /&gt;
* Sobald sichere Flughöhe erreicht/Hindernisse überflogen: Gas zurücknehmen, um Motoranzeigen in die grünen Bereiche zu bringen&lt;br /&gt;
** Treibstoffluss: max 15Gph&lt;br /&gt;
** Gashebel: max 23 in.Hg&lt;br /&gt;
&lt;br /&gt;
=== Reiseflug ===&lt;br /&gt;
[[File:c182-default.jpg|270px||thumb|Cessna 182S in der Luft]]&lt;br /&gt;
* Propeller: 2000-2400 RPM&lt;br /&gt;
* Gashebel: 18-23 mp&lt;br /&gt;
* Mixture &amp;quot;Fette Seite&amp;quot; über der EGT-Spitze als empfohlene &amp;quot;magere Einstellung&amp;quot; für den Reiseflug; oder 125°F EGT fetter für besten Schub&lt;br /&gt;
* Geschwindigkeit zwischen 120-140 Knoten IAS (abhängig von der Leistungseinstellung&lt;br /&gt;
* Kühlklappen geschlossen ({{Key press|f}} nach Bedarf -&amp;gt; CHT Anzeige beachten)&lt;br /&gt;
&lt;br /&gt;
=== Landung ===&lt;br /&gt;
* Landeklappen 20 grad oder Voll&lt;br /&gt;
* 60-70 KIAS&lt;br /&gt;
&lt;br /&gt;
=== Flugzeuggeschwindigkeiten ===&lt;br /&gt;
: ''Siehe auch [[De/Fluggeschwindigkeit#V-Speeds]]''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Geschwindigkeit !! IAS&lt;br /&gt;
|-&lt;br /&gt;
| Überziehgeschwindigkeit, Landekonfiguration, V&amp;lt;sub&amp;gt;S&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 36 kt&lt;br /&gt;
|-&lt;br /&gt;
| Überziehgeschwindigkeit, Reiseflugkonfiguration, V&amp;lt;sub&amp;gt;S&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/sub&amp;gt; || 43 kt&lt;br /&gt;
|-&lt;br /&gt;
| Rotationsgeschwindegkeit, V&amp;lt;sub&amp;gt;R&amp;lt;/sub&amp;gt; || 55 kt&lt;br /&gt;
|-&lt;br /&gt;
| Bester Steigwinkel, V&amp;lt;sub&amp;gt;X&amp;lt;/sub&amp;gt; || 63 kt&lt;br /&gt;
|-&lt;br /&gt;
| Höchste Steigrate, V&amp;lt;sub&amp;gt;Y&amp;lt;/sub&amp;gt; || 80 kt&lt;br /&gt;
|-&lt;br /&gt;
| Höchstgeschwindegkeit bei ausgefahrenen Landeklappen, V&amp;lt;sub&amp;gt;FE&amp;lt;/sub&amp;gt; || 100 kt&lt;br /&gt;
|-&lt;br /&gt;
| Manövergeschwindigkeit, V&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; || 110 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximale Reisegeschwindigkeit, V&amp;lt;sub&amp;gt;NO&amp;lt;/sub&amp;gt; || 140 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximal zulässige Höchstgeschwindigkeit, V&amp;lt;sub&amp;gt;NE&amp;lt;/sub&amp;gt; || 175 kt&lt;br /&gt;
|-&lt;br /&gt;
| Maximaler Seitenwind bei Landung|| 15 kt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Reiseflug, 80% Leistung,  6,000 ft || 140 kt&lt;br /&gt;
|-&lt;br /&gt;
|Reiseflug, 65% Leistung,  8,000 ft || 130 kt&lt;br /&gt;
|-&lt;br /&gt;
|Reiseflug, 55% Leistung, 10,000 ft || 121 kt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Entfernung,  75% Leistung,  6,000 ft || 820 nm&lt;br /&gt;
|-&lt;br /&gt;
|Entfernung,  65% Leistung,  8,000 ft || 910 nm&lt;br /&gt;
|-&lt;br /&gt;
|Entfernung,  55% Leistung, 10,000 ft || 968 nm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Beste Steigrate&amp;lt;ref&amp;gt;POH 5-19; bei 3100lbs, Seehöhe, 2400 RPM, Vollgas, Gemisch gesetzt nach &amp;quot;Maximum power Fuel Flow&amp;quot;-Plakette, Kühlklappen Offen, Standardtemperatur&amp;lt;/ref&amp;gt; || 924fpm&lt;br /&gt;
|-&lt;br /&gt;
|Dienstgipfelhöhe || 18,100ft&lt;br /&gt;
|-&lt;br /&gt;
|Startrollweg: 795ft  über 50ft Hindernis || 1,514ft&lt;br /&gt;
|-&lt;br /&gt;
|Landerollweg: 590ft  über 50ft Hindernis || 1,390ft&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:c182-cockpit-at-night.jpg|600px|center|Cessna 182S Konsolenbeleuchtung]]&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
'''''Ich frage mich, warum die 182s einfacher zu fliegen sein sollte, als die 172p?'''''&lt;br /&gt;
&lt;br /&gt;
Ist sie das? Falls du denkst, das FDM (Flugdynamikmodell) ist nicht korrekt: Ein FDM ist nur so gut wie die zugrundeliegenden Daten. Das FDM der c182s benutzt reale Koeffizienzdaten, wo diese verfügbar sind, aber nicht alle benötigten Koeffizienten wurden gefunden. Wo diese nicht aufzutreiben waren, haben wir Beschreibungen von Piloten echter C182 benutzt, und diese sind naturgemäß subjektiv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Nach google stimmen die meisten Piloten überein, dass die 182 schwerer zu fliegen ist, als die 172''''' &lt;br /&gt;
&lt;br /&gt;
Nicht wegen der Flugeigenschaften. Allerdings verbiegen sich viele Piloten beim Landen die Firewall, weil die Nase schwerer ist als bei einer 172. Viele Piloten mögen allerdings die größere Leistung, höhere Geschwindigkeit, die bessere Dienstgipfelhöhe, den [[constant speed propeller|Festdrehzahlpropeller]], Kühlklappen und die [[IFR]]-Ausrüstung. Und das ist auch schon der Grund - wegen all diesen Extras ist es schwerer, eine 182 zu fliegen, als eine 172. Die FAA zählt die Cessna 182 zu den &amp;quot;high perfomance aircraft&amp;quot;. Stell dir vor, du befindest dich in einer überfüllten Gegend wie KLAX, im Anflug auf den Flughafen, während du alle paar Sekunden dem Funkverkehr zuhörst, die Höhe und Geschwindigkeit überwachst, den Motor regelst, die Nadeln des [[VOR]] jagst, alles gleichzeitig während du auf den Verkehr achtest und in schlechtem Wetter unterwegs bist - herausfordernd!&lt;br /&gt;
&lt;br /&gt;
Vielleicht möchtest du dies hier lesen (englisch): [https://pilotbrian.blogspot.com/2009/05/stepping-up-to-c182.html Stepping Up to a C182 ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Wurde bei der C182S die Einfachheit zu fliegen gegenüber dem Realismus bevorzugt'''''&lt;br /&gt;
&lt;br /&gt;
Nein. Die Autoren benutzen echte Zahlen und Daten als Grundlage, sofern sie verfügbar sind, und das Ziel ist ein möglichst realistisches Modell. Beispielsweise stimmen die Flugwerte sehr nah mit denen im POH überein, und es werden echte aerodynamische Koeffiziente eingesetzt, falls verfügbar.&lt;br /&gt;
Falls du etwas entdeckts, dass nicht passt, eröffne bitte ein [https://github.com/HHS81/c182s/issues Ticket im Entwicklungsprojekt] und wir finden heraus, was los ist. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Warum hüpfe ich bei Landungen immer über die Rolbahn?'''''&lt;br /&gt;
&lt;br /&gt;
Die C182 ist sehr Frontlastig, vor allem im Vergleich zu einer 172. Das erschwert den Flare bei der Landung, und du brauchst eine relativ ungewohnte, [[:File:C182s-LandingPicture.jpg|hohe Neigung]] um nicht zu früh aufzusetzen. Auch die Geschwindigkeit ist ein kritischer Faktor, versuche nicht mit zu hoher Geschwindigkeit zu landen (peile 60-70 KIAS für den Endanflug an, je nach Wind und Flaps). Am wichtigsten aber: Versuche nicht, die Maschine mit dem Steuerhorn auf den Boden zu zwingen, und lande nie mit dem Bugrad zuerst.&lt;br /&gt;
Eine perfekte Landung erkennst du daran, dass du die Stall-Warnung hörst, kurz bevor du sanft mit den beiden Rädern des Hauptfahrwerks aufsetzt, und wenn du danach das Bugrad sanft aufsetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Auf 3.000 ft komme ich nicht über 110 Knoten. MP: 23, RPM: 2450, Fuelflow: 14. Was hab ich übersehen?'''''&lt;br /&gt;
&lt;br /&gt;
Die Checkliste! Wenn du nicht so schnell fliegst, wie du erwartest, prüfe: Gemisch, Propellergeschwindigkeit, Kühlklappen, Vereisung, Motordefekt (oder kalt).&lt;br /&gt;
Meistens wurde einfach vergessen, die Lande- oder Kühlklappen zu schließen. Ein anderer Grund kan sein, dass du [[De/Fluggeschwindigkeit#True_airspeed|KTAS (Knots True Airspeed) und KIAS (Knots Indicated Airspeed)]] verwechselst: Die Tabellen und Publikatoinen geben die Geschwindigkeit oft in KTAS an, und du musst KTAS vom {{wikipedia|Fahrtmesser|lang=de}} ablesen. Wie das geht? - lies weiter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''''' Wie lese ich meine wahre Fluggeschwindigkeit ab? ([[De/Fluggeschwindigkeit#True_airspeed|KTAS]])?'''''&lt;br /&gt;
&lt;br /&gt;
Der {{wikipedia|Fahrtmesser|lang=de}} hat ein kleines Fenster am oberen Rand. Mit dem Drehrad links unten stellst du die dahinterliegende Scheibe so ein, dass die Höhe (bei Standarddruck=29.92 inHG!) mit der Außentemperatur übereinstimmt. Im unteren Fenster des Fahrtmessers kannst du dann einfach über die Nadel die KTAS ablesen.&lt;br /&gt;
&lt;br /&gt;
[[:File:C182s-ais-tas.png|Es gibt einen Screenshot]] der die Verwendung der TAS-Scheibe zeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Als ich in kaltem Wetter geflogen bin, verlor ich Fahrt und bin abgestürzt. Wo ist die Vergaservorwärmung?'''''&lt;br /&gt;
&lt;br /&gt;
Die Cessna 182S hat keinen Vergaser, da sie einen Motor mit Direkteinspritzung benutzt. Was du allerdings erfahren hast, war Vereisung des Propellers und Flugzeugs.&lt;br /&gt;
Mit diesem Flugzeugtyp ist es nicht erlaubt, unter Bedingungen zu fliegen, die wahrscheinlich zu Vereisung führen. Vermeide feuchte Luft (Wolken....) bei Temperaturen um den Gefrierpunkt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Cessna 182S lässt sich nicht starten'''''&lt;br /&gt;
&lt;br /&gt;
Möglicherweise ist folgendes passiert:&lt;br /&gt;
# vielleicht bist du der checkliste nicht akkurat genug gefolgt.&lt;br /&gt;
# vielleicht hast du den Motor beim Primen absaufen lassen. Folge [[De/Cessna_182S#Motor_Kaltstart_.28manual_and_complex_startup.29|der Prozedur am Ende dieses Abschnittes]].&lt;br /&gt;
# Nach einem missglückten Motorstart bei Temperturen unter dem Gefrierpunkt könnten nun die Zündkerzen vereist sein. Schließe das Vorheizgerät an und versuche es nach 5-10 (simulierten) Minuten erneut.&lt;br /&gt;
# Der Motor ist einfach zu kalt um anzuspringen. Schließe das Vorheizgerät an.&lt;br /&gt;
# du hast den Motor früher so beschädigt, dass er jetzt nicht mehr starten kann (hast du dunklen Qualm aus der Motorhaube bemerkt?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Mein Motor überhitzt beim Starten/Steigflug dauernd!'''''&lt;br /&gt;
&lt;br /&gt;
Sobald du alle Hindernisse überflogen hast solltest du die Motorleistung reduzieren. Überwache die CHT-Anzeige engmaschig, und nimm die Leistung spätestens vor dem oberen Limit zurück.&lt;br /&gt;
Schau auch in den &amp;quot;Normal enroute climb&amp;quot; Abschnitt der Checkliste, um Details zu den Einstellungen zu finden (Kurzgesagt: halte Gas und Treibstoffluss im grünen Bereich, Kühlklappen offen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Warum kann ich die Flügelenden und die Motorhaube nicht sehen?'''''&lt;br /&gt;
&lt;br /&gt;
Die Kopf/Augenposition wurde sorgfältig ausgewählt, nachdem wir Bilder der Cessna 182S/T und Pilotenberichte verglichen haben. Wenn du das ansiehst, stellst du fest, dass die Augenhöhe des Piloten mit der Oberkante des seitlichen Fensterrahmens übereinstimmt. Der Flügel sitzt jedoch viel höher, d.h. es ist unmöglich, das Flügelende zu sehen.&lt;br /&gt;
Der Blendschutz des Armaturenbretts ist ziemlich hoch, und so kannst du die Motorhaube vor dir nicht sehen.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungsstand / Fehler / ToDos ==&lt;br /&gt;
&lt;br /&gt;
Dieses Flugzeugmodell wird kontinuierlich weiterentwickelt. Hierfür gibt es ein öffentliches [https://github.com/HHS81/c182s Repository], in dem auch eine [https://github.com/HHS81/c182s/issues Liste von offenen Fehlern und Erweiterungsideen] geführt wird. Das Repository ist einen Besuch wert!&lt;br /&gt;
&lt;br /&gt;
* '''Defektes Fahrwerk in Multiplayer''': Das Schadensmodell wurde 5/2021 für FlightGear 2020.4.0 erweitert um Schaden daran zu simulieren. Ältere Versionen (2020.3 und älter) erhalten die Multiplayer-Daten hierfür nicht. Das führt dazu, dass das das &amp;quot;Fahrwerk-OK&amp;quot;-Property konstant ein defektes Fahrwerk für ältere Modelle anzeigt, wenn man selbst ein neueres Modell geladen hat. Die Lösung ist, dass der Pilot, der die ältere Modellversion hat, auf die neuere Version aktualisiert (aus FGADDON über den Launcher).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Die aktuellste Entwickerversion benutzen ===&lt;br /&gt;
Wenn du die aktuellste (potentiell unveröffentlichte) Version von github benutzen möchtest, kannst du sie ganz einfach herunterladen.&lt;br /&gt;
Es kann sein, dass diese Version nicht mit älteren FlightGear-Versionen funktioniert. Die Entwicklung zielt normalerweise darauf ab, die aktuell stabile FlightGear-Version zu unterstützen, allerdings kann es auch passieren, dass auf neueste Entwicklungen in FlightGear aufgebaut wird, und dann funktioniert das Flugzeug nur auf der FlightGear Entwicklerversion.&lt;br /&gt;
&lt;br /&gt;
* Erstelle an einem für dich passenden Ort eine neuen Ordner namens &amp;quot;Aircraft&amp;quot; (falls du noch keinen solchen hast). Füge diesen Ordner im FlightGear-Starter im &amp;quot;Addons&amp;quot;-Tab als &amp;quot;Zusätzliche Flugzeug-Verzeichnisse&amp;quot; hinzu.&lt;br /&gt;
* Lade ein ZIP-Paket herunter (siehe Links in &amp;quot;Versionen&amp;quot; unten)&lt;br /&gt;
* Entpacke dieses ZIP-Paket in deinen &amp;quot;Aircraft&amp;quot;-Ordner&lt;br /&gt;
* Benenne den Ordner um: &amp;lt;code&amp;gt;c182s-&amp;lt;version&amp;gt;&amp;lt;/code&amp;gt; =&amp;gt; &amp;lt;code&amp;gt;c182s&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Versionen:'''&lt;br /&gt;
* Die letzte offizielle Veröffentlichug findest du hier: https://github.com/HHS81/c182s/releases. Dieses Release wird normalerweisein FGADDON für die nächste stabile FlightGear-Version (&amp;quot;next&amp;quot;) hochgeladen und ist dann über den FlightGear-Starter bequem zu installieren. Kompatible Änderungen werden auch Fallweise in die aktuelle stabile FlightGear-Version zurückportiert.&lt;br /&gt;
* Aktuellster Entwicklungscode (&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;-branch) kann hier bezogen werden: https://github.com/HHS81/c182s/archive/refs/heads/master.zip&lt;br /&gt;
&lt;br /&gt;
== Gallery ==&lt;br /&gt;
{{screenshot cat&lt;br /&gt;
| category = Cessna 182S screenshots&lt;br /&gt;
| subject  = der Cessna 182S&lt;br /&gt;
| image    = C182-default.jpg&lt;br /&gt;
}}{{-}}&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
GXLTGAltenrhein.jpg|Flugzeug auf dem Vorfeld St. Gallen-Altenrhein/ Schweiz&lt;br /&gt;
Cessna182S compositor2.jpg|Flugzeug im Dunkeln, alle Lichter an&lt;br /&gt;
c182s.jpg|Cessna 182S am Abend&lt;br /&gt;
c182-cockpit-view.jpg|Standard Cockpitsicht&lt;br /&gt;
c182-external2.jpg|HB-CZV livery&lt;br /&gt;
c182-external3.jpg|D-ELFP livery&lt;br /&gt;
c182-external5.jpg|Cessna 182S über Kalifornien&lt;br /&gt;
c182-external6.jpg|Weitere Ansicht des HB-CZV livery&lt;br /&gt;
C182-4.jpg|Taking off&lt;br /&gt;
c182-rosskopf-at-dusk.jpg|Cessna 182S bei Roßkopf in Freiburg/ Deutschland&lt;br /&gt;
C182STakeOff.jpg|Cessna 182S mit selbstgewählter Kennung bei Siegerland / Deutschland&lt;br /&gt;
C182s-LandingPicture.jpg|C182s Landung, zeigt die nötige hohe Neigung&lt;br /&gt;
C182SDavtron803.jpg|Die Davtron 803 digitaluhr in Aktion&lt;br /&gt;
C182SWinterKit.jpg|Winterkit ausgerüstet, und Vorheizen mit dem Dragon heater&lt;br /&gt;
C182SFuelManagement.jpg|Fuel Management Dialog&lt;br /&gt;
c182-rain.jpg|Regeneffekt auf der Windschutzscheibe&lt;br /&gt;
C182-oil-cap.png|Position der Klappe zum Ölmesstab&lt;br /&gt;
C182SOilManagement.jpg|Oil Management Dialog&lt;br /&gt;
C182-fuelports.png|Treibstoffwähler und -filter Prüfports&lt;br /&gt;
c182-night-take-off.jpg|Ready to take off bei Nacht&lt;br /&gt;
c182-3.jpg|D-ELFP am Abend&lt;br /&gt;
C182SPitot.jpg|Pitot, Cover und Nachricht&lt;br /&gt;
C182SFreeMovementCheck.jpg|Prüfen der Querruder&lt;br /&gt;
C182SCustomRegistration.jpg|Selbstwählbare Kennung&lt;br /&gt;
c182-external4.jpg|N182PJ livery&lt;br /&gt;
c182-external-at-night.jpg|Default livery bei Nacht&lt;br /&gt;
c182-external1.jpg|N321HW livery&lt;br /&gt;
C182Scrashed.jpg|Flugzeug beschädigt&lt;br /&gt;
AboveSouthGermany.jpg|Flugzeug fliegt über Süddeutschland&lt;br /&gt;
Cessna182S compositor.jpg|Flugzeug im Dunkel, alle Lichter an&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{Wikipedia|Cessna 182 Skylane|lang=en}}&lt;br /&gt;
* [http://www.freechecklists.net/Resources/Cessna/182S+Skylane/ Links to Cessna 182S Checklists and W&amp;amp;B sheet]&lt;br /&gt;
* [http://tssflyingclub.org/documents/C182S_POH.pdf Cessna 182S POH]&lt;br /&gt;
* [https://www.aopa.org/go-fly/aircraft-and-ownership/aircraft-fact-sheets/cessna-182 Cessna 182S Aircraft Information Booklet]&lt;br /&gt;
* [http://www.jberaeroclub.com/uploads/1/7/4/0/17405139/c182maneuversguiderev2.pdf C182 Standardized flight maneuvers guide]&lt;br /&gt;
* [https://airplaneacademy.com/9-actionable-cessna-182-landing-tips-you-can-implement-today/ 9 Actionable Cessna 182 Landing Tips You Can Implement Today]&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
{{Cessna}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft with a cockpit-only autopilot]]&lt;br /&gt;
[[Category:Red Griffin ATC compatible aircraft]]&lt;br /&gt;
&lt;br /&gt;
[[en:Cessna 182S]]&lt;/div&gt;</summary>
		<author><name>Hbeni</name></author>
	</entry>
</feed>